FAILED: patch "[PATCH] ksmbd: don't allow O_TRUNC open on read-only share" 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 d592a9158a112d419f341f035d18d02f8d232def
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024011805-atlantic-diffuser-53a5@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
d592a9158a11 ("ksmbd: don't allow O_TRUNC open on read-only share")38c8a9a52082 ("smb: move client and server files to common directory fs/smb") abdb1742a312 ("cifs: get rid of mount options string parsing")9fd29a5bae6e ("cifs: use fs_context for automounts")5dd8ce24667a ("cifs: missing directory in MAINTAINERS file")332019e23a51 ("Merge tag '5.20-rc-smb3-client-fixes-part2' of git://git.samba.org/sfrench/cifs-2.6")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From d592a9158a112d419f341f035d18d02f8d232def Mon Sep 17 00:00:00 2001
From: Namjae Jeon <[email protected]>
Date: Sun, 7 Jan 2024 21:24:07 +0900
Subject: [PATCH] ksmbd: don't allow O_TRUNC open on read-only share
When file is changed using notepad on read-only share(read_only = yes in ksmbd.conf), There is a problem where existing data is truncated. notepad in windows try to O_TRUNC open(FILE_OVERWRITE_IF) and all data in file is truncated. This patch don't allow O_TRUNC open on read-only share and add KSMBD_TREE_CONN_FLAG_WRITABLE check in smb2_set_info().
fs/smb/server/smb2pdu.c +9 -14
@@ -2972,7 +2972,7 @@ int smb2_open(struct ksmbd_work *work) &may_flags);if (!test_tree_conn_flag (tcon,KSMBD_TREE_CONN_FLAG_WRITABLE )) { -if (open_flags &O_CREAT ) { +if (open_flags & (O_CREAT |O_TRUNC )) {ksmbd_debug (SMB ,"User does not have write permission\n" ); rc = -EACCES ;
@@ -5944,12 +5944,6 @@ static int smb2_set_info_file(struct ksmbd_work *work, struct ksmbd_file *fp, }case FILE_RENAME_INFORMATION : { -if (!test_tree_conn_flag (work->tcon,KSMBD_TREE_CONN_FLAG_WRITABLE )) { -ksmbd_debug (SMB , -"User does not have write permission\n" ); -return -EACCES ; - } -if (buf_len <sizeof (struct smb2_file_rename_info ))return -EINVAL ;
@@ -5969,12 +5963,6 @@ static int smb2_set_info_file(struct ksmbd_work *work, struct ksmbd_file *fp, }case FILE_DISPOSITION_INFORMATION : { -if (!test_tree_conn_flag (work->tcon,KSMBD_TREE_CONN_FLAG_WRITABLE )) { -ksmbd_debug (SMB , -"User does not have write permission\n" ); -return -EACCES ; - } -if (buf_len <sizeof (struct smb2_file_disposition_info ))return -EINVAL ;
@@ -6036,7 +6024,7 @@ int smb2_set_info(struct ksmbd_work *work) {struct smb2_set_info_req *req;struct smb2_set_info_rsp *rsp; -struct ksmbd_file *fp; +struct ksmbd_file *fp =NULL ;int rc =0 ;unsigned int id =KSMBD_NO_FID , pid =KSMBD_NO_FID ;
@@ -6056,6 +6044,13 @@ int smb2_set_info(struct ksmbd_work *work) rsp =smb2_get_msg (work->response_buf); } +if (!test_tree_conn_flag (work->tcon,KSMBD_TREE_CONN_FLAG_WRITABLE )) { +ksmbd_debug (SMB ,"User does not have write permission\n" ); +pr_err ("User does not have write permission\n" ); + rc = -EACCES ; + goto err_out; + } +if (!has_file_id (id)) { id = req->VolatileFileId; pid = req->PersistentFileId;