From: Dave Reisner Date: Fri, 2 Dec 2016 14:23:23 +0000 (-0500) Subject: cgroup: properly check for ignore-notfound paths (#4803) X-Git-Tag: v233.3~135 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=b7c94af763854e6640ed9cd40e56b8f924323c73 cgroup: properly check for ignore-notfound paths (#4803) Follow-up to #4687 and e7330dfe14b1965f. --- diff --git a/src/core/cgroup.c b/src/core/cgroup.c index e44f72924..1e14d9fc4 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -288,14 +288,21 @@ static int lookup_block_device(const char *p, dev_t *dev) { static int whitelist_device(const char *path, const char *node, const char *acc) { char buf[2+DECIMAL_STR_MAX(dev_t)*2+2+4]; struct stat st; + bool ignore_notfound; int r; assert(path); assert(acc); + if (node[0] == '-') { + /* Non-existent paths starting with "-" must be silently ignored */ + node++; + ignore_notfound = true; + } else + ignore_notfound = false; + if (stat(node, &st) < 0) { - /* path starting with "-" must be silently ignored */ - if (errno == ENOENT && startswith(node, "-")) + if (errno == ENOENT && ignore_notfound) return 0; return log_warning_errno(errno, "Couldn't stat device %s: %m", node);