From: Lennart Poettering Date: Mon, 9 Dec 2024 12:50:48 +0000 (+0100) Subject: chattr-util: move O_PATH conversion from read_attr_at() to read_attr_fd() X-Git-Tag: v258-rc1~1833^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e837c257d07b014d1b9e516bd80352c5a1f31eaf;p=thirdparty%2Fsystemd.git chattr-util: move O_PATH conversion from read_attr_at() to read_attr_fd() --- diff --git a/src/basic/chattr-util.c b/src/basic/chattr-util.c index 9677e9a35a9..4aabcc68183 100644 --- a/src/basic/chattr-util.c +++ b/src/basic/chattr-util.c @@ -145,6 +145,11 @@ int read_attr_fd(int fd, unsigned *ret) { if (!S_ISDIR(st.st_mode) && !S_ISREG(st.st_mode)) return -ENOTTY; + _cleanup_close_ int fd_close = -EBADF; + fd = fd_reopen_condition(fd, O_RDONLY|O_CLOEXEC|O_NOCTTY, O_PATH, &fd_close); /* drop O_PATH if it is set */ + if (fd < 0) + return fd; + return RET_NERRNO(ioctl(fd, FS_IOC_GETFLAGS, ret)); } @@ -155,11 +160,9 @@ int read_attr_at(int dir_fd, const char *path, unsigned *ret) { assert(dir_fd >= 0 || dir_fd == AT_FDCWD); assert(ret); - if (isempty(path)) { - fd = fd_reopen_condition(dir_fd, O_RDONLY|O_CLOEXEC|O_NOCTTY, O_PATH, &fd_close); /* drop O_PATH if it is set */ - if (fd < 0) - return fd; - } else { + if (isempty(path) && dir_fd != AT_FDCWD) + fd = dir_fd; + else { fd_close = xopenat(dir_fd, path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); if (fd_close < 0) return fd_close;