From 183fee2cbbefdf8b11305051f3fd0f3aed3d1f1d Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 13 Oct 2022 11:16:14 +0200 Subject: [PATCH] 5.19-stable patches added patches: ceph-don-t-truncate-file-in-atomic_open.patch --- ...h-don-t-truncate-file-in-atomic_open.patch | 52 +++++++++++++++++++ queue-5.19/series | 1 + 2 files changed, 53 insertions(+) create mode 100644 queue-5.19/ceph-don-t-truncate-file-in-atomic_open.patch diff --git a/queue-5.19/ceph-don-t-truncate-file-in-atomic_open.patch b/queue-5.19/ceph-don-t-truncate-file-in-atomic_open.patch new file mode 100644 index 00000000000..26ef495be0f --- /dev/null +++ b/queue-5.19/ceph-don-t-truncate-file-in-atomic_open.patch @@ -0,0 +1,52 @@ +From 7cb9994754f8a36ae9e5ec4597c5c4c2d6c03832 Mon Sep 17 00:00:00 2001 +From: Hu Weiwen +Date: Fri, 1 Jul 2022 10:52:27 +0800 +Subject: ceph: don't truncate file in atomic_open + +From: Hu Weiwen + +commit 7cb9994754f8a36ae9e5ec4597c5c4c2d6c03832 upstream. + +Clear O_TRUNC from the flags sent in the MDS create request. + +`atomic_open' is called before permission check. We should not do any +modification to the file here. The caller will do the truncation +afterward. + +Fixes: 124e68e74099 ("ceph: file operations") +Signed-off-by: Hu Weiwen +Reviewed-by: Xiubo Li +Signed-off-by: Ilya Dryomov +[Xiubo: fixed a trivial conflict for 5.19 backport] +Signed-off-by: Xiubo Li +Signed-off-by: Greg Kroah-Hartman +--- + fs/ceph/file.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +--- a/fs/ceph/file.c ++++ b/fs/ceph/file.c +@@ -740,6 +740,12 @@ int ceph_atomic_open(struct inode *dir, + if (dentry->d_name.len > NAME_MAX) + return -ENAMETOOLONG; + ++ /* ++ * Do not truncate the file, since atomic_open is called before the ++ * permission check. The caller will do the truncation afterward. ++ */ ++ flags &= ~O_TRUNC; ++ + if (flags & O_CREAT) { + if (ceph_quota_is_max_files_exceeded(dir)) + return -EDQUOT; +@@ -807,9 +813,7 @@ retry: + } + + set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags); +- err = ceph_mdsc_do_request(mdsc, +- (flags & (O_CREAT|O_TRUNC)) ? dir : NULL, +- req); ++ err = ceph_mdsc_do_request(mdsc, (flags & O_CREAT) ? dir : NULL, req); + if (err == -ENOENT) { + dentry = ceph_handle_snapdir(req, dentry); + if (IS_ERR(dentry)) { diff --git a/queue-5.19/series b/queue-5.19/series index 2ca2890811d..caa06034619 100644 --- a/queue-5.19/series +++ b/queue-5.19/series @@ -2,3 +2,4 @@ nilfs2-fix-null-pointer-dereference-at-nilfs_bmap_lookup_at_level.patch nilfs2-fix-use-after-free-bug-of-struct-nilfs_root.patch nilfs2-fix-leak-of-nilfs_root-in-case-of-writer-thread-creation-failure.patch nilfs2-replace-warn_ons-by-nilfs_error-for-checkpoint-acquisition-failure.patch +ceph-don-t-truncate-file-in-atomic_open.patch -- 2.47.3