From: Yu Watanabe Date: Wed, 9 Jun 2021 04:33:34 +0000 (+0900) Subject: tmpfile: always get file descriptor of root or current directory X-Git-Tag: v249-rc1~45^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c68cafbabef61afed9d95b15a37eedb1e8577577;p=thirdparty%2Fsystemd.git tmpfile: always get file descriptor of root or current directory Fixes CID#1457467. --- diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c index 527ff5d49c6..8e8be847285 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -2129,12 +2129,10 @@ static int mkdir_parents_rm_if_wrong_type(mode_t child_mode, const char *path) { "Trailing path separators are only allowed if child_mode is not set; got \"%s\"", path); /* Get the parent_fd and stat. */ - parent_fd = AT_FDCWD; - if (path_is_absolute(path)) { - parent_fd = open("/", O_NOCTTY | O_CLOEXEC | O_DIRECTORY); - if (parent_fd < 0) - return log_error_errno(errno, "Failed to open root: %m"); - } + parent_fd = openat(AT_FDCWD, path_is_absolute(path) ? "/" : ".", O_NOCTTY | O_CLOEXEC | O_DIRECTORY); + if (parent_fd < 0) + return log_error_errno(errno, "Failed to open root: %m"); + if (fstat(parent_fd, &parent_st) < 0) return log_error_errno(errno, "Failed to stat root: %m");