From 340bc268c8a4e184424d0714002728dee4bab008 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 7 Dec 2022 09:51:30 +0900 Subject: [PATCH] fs-util: make chmod_and_chown_at() work with empty path and AT_FDCWD Follow-up for 7d000133c2fbf4b5986185ccfc0273a2428972a9. Fixes CID#1500608. --- src/basic/fs-util.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c index 33b4d1f07b..fbc7492b15 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -204,9 +204,17 @@ int chmod_and_chown_at(int dir_fd, const char *path, mode_t mode, uid_t uid, gid fd = openat(dir_fd, path, O_PATH|O_CLOEXEC|O_NOFOLLOW); if (fd < 0) return -errno; + dir_fd = fd; + + } else if (dir_fd == AT_FDCWD) { + /* Let's acquire an O_PATH fd of the current directory */ + fd = openat(dir_fd, ".", O_PATH|O_CLOEXEC|O_NOFOLLOW|O_DIRECTORY); + if (fd < 0) + return -errno; + dir_fd = fd; } - return fchmod_and_chown(path ? fd : dir_fd, mode, uid, gid); + return fchmod_and_chown(dir_fd, mode, uid, gid); } int fchmod_and_chown_with_fallback(int fd, const char *path, mode_t mode, uid_t uid, gid_t gid) { -- 2.25.1