fs/xattr: Fix handling of AT_FDCWD in setxattrat(2) and getxattrat(2)
authorJan Kara <jack@suse.cz>
Thu, 24 Apr 2025 13:22:47 +0000 (15:22 +0200)
committerChristian Brauner <brauner@kernel.org>
Fri, 25 Apr 2025 10:11:56 +0000 (12:11 +0200)
Currently, setxattrat(2) and getxattrat(2) are wrongly handling the
calls of the from setxattrat(AF_FDCWD, NULL, AT_EMPTY_PATH, ...) and
fail with -EBADF error instead of operating on CWD. Fix it.

Fixes: 6140be90ec70 ("fs/xattr: add *at family syscalls")
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/20250424132246.16822-2-jack@suse.cz
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/xattr.c

index 02bee14..fabb2a0 100644 (file)
@@ -703,7 +703,7 @@ static int path_setxattrat(int dfd, const char __user *pathname,
                return error;
 
        filename = getname_maybe_null(pathname, at_flags);
-       if (!filename) {
+       if (!filename && dfd >= 0) {
                CLASS(fd, f)(dfd);
                if (fd_empty(f))
                        error = -EBADF;
@@ -847,7 +847,7 @@ static ssize_t path_getxattrat(int dfd, const char __user *pathname,
                return error;
 
        filename = getname_maybe_null(pathname, at_flags);
-       if (!filename) {
+       if (!filename && dfd >= 0) {
                CLASS(fd, f)(dfd);
                if (fd_empty(f))
                        return -EBADF;