FAILED: patch "[PATCH] f2fs: Require FMODE_WRITE for atomic write ioctls" failed to apply to 5.15-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 4f5a100f87f32cb65d4bb1ad282a08c92f6f591e
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024100133-islamic-matriarch-4cee@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
4f5a100f87f3 ("f2fs: Require FMODE_WRITE for atomic write ioctls")01beba7957a2 ("fs: port inode_owner_or_capable() to mnt_idmap")f2d40141d5d9 ("fs: port inode_init_owner() to mnt_idmap")4609e1f18e19 ("fs: port ->permission() to pass mnt_idmap")8782a9aea3ab ("fs: port ->fileattr_set() to pass mnt_idmap")13e83a4923be ("fs: port ->set_acl() to pass mnt_idmap")77435322777d ("fs: port ->get_acl() to pass mnt_idmap")011e2b717b1b ("fs: port ->tmpfile() to pass mnt_idmap")5ebb29bee8d5 ("fs: port ->mknod() to pass mnt_idmap")c54bd91e9eab ("fs: port ->mkdir() to pass mnt_idmap")7a77db95511c ("fs: port ->symlink() to pass mnt_idmap")6c960e68aaed ("fs: port ->create() to pass mnt_idmap")b74d24f7a74f ("fs: port ->getattr() to pass mnt_idmap")c1632a0f1120 ("fs: port ->setattr() to pass mnt_idmap")abf08576afe3 ("fs: port vfs_*() helpers to struct mnt_idmap")6022ec6ee2c3 ("Merge tag 'ntfs3_for_6.2' of https://github.com/Paragon-Software-Group/linux-ntfs3")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 4f5a100f87f32cb65d4bb1ad282a08c92f6f591e Mon Sep 17 00:00:00 2001
From: Jann Horn <[email protected]>
Date: Tue, 6 Aug 2024 16:07:16 +0200
Subject: [PATCH] f2fs: Require FMODE_WRITE for atomic write ioctls
The F2FS ioctls for starting and committing atomic writes check for inode_owner_or_capable(), but this does not give LSMs like SELinux or Landlock an opportunity to deny the write access - if the caller's FSUID matches the inode's UID, inode_owner_or_capable() immediately returns true.
There are scenarios where LSMs want to deny a process the ability to write particular files, even files that the FSUID of the process owns; but this can currently partially be bypassed using atomic write ioctls in two ways:
- F2FS_IOC_START_ATOMIC_REPLACE + F2FS_IOC_COMMIT_ATOMIC_WRITE can truncate an inode to size 0
- F2FS_IOC_START_ATOMIC_WRITE + F2FS_IOC_ABORT_ATOMIC_WRITE can revert changes another process concurrently made to a file
Fix it by requiring FMODE_WRITE for these operations, just like for F2FS_IOC_MOVE_RANGE. Since any legitimate caller should only be using these ioctls when intending to write into the file, that seems unlikely to break anything.
fs/f2fs/file.c +9 -0
@@ -2131,6 +2131,9 @@ static int f2fs_ioc_start_atomic_write(struct file *filp, bool truncate)loff_t isize;int ret; +if (!(filp->f_mode &FMODE_WRITE )) +return -EBADF ; +if (!inode_owner_or_capable (idmap, inode))return -EACCES ;
@@ -2239,6 +2242,9 @@ static int f2fs_ioc_commit_atomic_write(struct file *filp)struct mnt_idmap *idmap =file_mnt_idmap (filp);int ret; +if (!(filp->f_mode &FMODE_WRITE )) +return -EBADF ; +if (!inode_owner_or_capable (idmap, inode))return -EACCES ;
@@ -2271,6 +2277,9 @@ static int f2fs_ioc_abort_atomic_write(struct file *filp)struct mnt_idmap *idmap =file_mnt_idmap (filp);int ret; +if (!(filp->f_mode &FMODE_WRITE )) +return -EBADF ; +if (!inode_owner_or_capable (idmap, inode))return -EACCES ;