fs: require inode_owner_or_capable for F_SET_RW_HINT
authorChristoph Hellwig <hch@lst.de>
Fri, 22 Nov 2024 12:29:24 +0000 (13:29 +0100)
committerChristian Brauner <brauner@kernel.org>
Mon, 25 Nov 2024 14:16:49 +0000 (15:16 +0100)
F_SET_RW_HINT controls data placement in the file system and / or
device and should not be available to everyone who can read a given file.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20241122122931.90408-2-hch@lst.de
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/fcntl.c

index ac77dd9..49884fa 100644 (file)
@@ -374,6 +374,9 @@ static long fcntl_set_rw_hint(struct file *file, unsigned int cmd,
        u64 __user *argp = (u64 __user *)arg;
        u64 hint;
 
+       if (!inode_owner_or_capable(file_mnt_idmap(file), inode))
+               return -EPERM;
+
        if (copy_from_user(&hint, argp, sizeof(hint)))
                return -EFAULT;
        if (!rw_hint_valid(hint))