FAILED: patch "[PATCH] ksmbd: fix missing use of get_write in in smb2_set_ea()" failed to apply to 6.1-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.1-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-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x 2bfc4214c69c62da13a9da8e3c3db5539da2ccd3
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024061749-decrease-oversold-6961@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^..
Possible dependencies:
2bfc4214c69c ("ksmbd: fix missing use of get_write in in smb2_set_ea()") 864fb5d37163 ("ksmbd: fix possible deadlock in smb2_open") 2b57a4322b1b ("ksmbd: check if a mount point is crossed during path lookup") 40b268d384a2 ("ksmbd: add mnt_want_write to ksmbd vfs functions") 6fe55c2799bc ("ksmbd: call putname after using the last component") df14afeed2e6 ("ksmbd: fix uninitialized pointer read in smb2_create_link()") 38c8a9a52082 ("smb: move client and server files to common directory fs/smb") 74d7970febf7 ("ksmbd: fix racy issue from using ->d_parent and ->d_name") 211db0ac9e3d ("ksmbd: remove internal.h include")4d7ca4090184 ("fs: port vfs{g,u}id helpers to mnt_idmap") c14329d39f2d ("fs: port fs{g,u}id helpers to mnt_idmap") e67fe63341b8 ("fs: port i_{g,u}id_into_vfs{g,u}id() to mnt_idmap") 0dbe12f2e49c ("fs: port i_{g,u}id_{needs_}update() to mnt_idmap") 9452e93e6dae ("fs: port privilege checking helpers to mnt_idmap") f2d40141d5d9 ("fs: port inode_init_owner() to mnt_idmap") 4609e1f18e19 ("fs: port ->permission() 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")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 2bfc4214c69c62da13a9da8e3c3db5539da2ccd3 Mon Sep 17 00:00:00 2001
From: Namjae Jeon <[email protected]>
Date: Tue, 11 Jun 2024 23:27:27 +0900
Subject: [PATCH] ksmbd: fix missing use of get_write in in smb2_set_ea()
Fix an issue where get_write is not used in smb2_set_ea().
fs/smb/server/smb2pdu.c +4 -3
@@ -2367,7 +2367,8 @@ static int smb2_set_ea(struct smb2_ea_info *eabuf, unsigned int buf_len,if (rc >0 ) { rc =ksmbd_vfs_remove_xattr (idmap, path, - attr_name); + attr_name, + get_write);if (rc <0 ) { ksmbd_debug(SMB,
@@ -2382,7 +2383,7 @@ static int smb2_set_ea(struct smb2_ea_info *eabuf, unsigned int buf_len, }else { rc =ksmbd_vfs_setxattr (idmap, path, attr_name, value,le16_to_cpu (eabuf->EaValueLength), -0 , true); +0 , get_write);if (rc <0 ) { ksmbd_debug(SMB, "ksmbd_vfs_setxattr is failed(%d)\n",
@@ -2474,7 +2475,7 @@ static int smb2_remove_smb_xattrs(const struct path *path) !strncmp(&name[XATTR_USER_PREFIX_LEN], STREAM_PREFIX, STREAM_PREFIX_LEN)) { err =ksmbd_vfs_remove_xattr (idmap, path, - name); + name, true);if (err)ksmbd_debug (SMB ,"remove xattr failed : %s\n" , name);
fs/smb/server/vfs.c +11 -6
@@ -1058,16 +1058,21 @@ int ksmbd_vfs_fqar_lseek(struct ksmbd_file *fp, loff_t start, loff_t length, }int ksmbd_vfs_remove_xattr (struct mnt_idmap *idmap, -const struct path *path,char *attr_name) +const struct path *path,char *attr_name, +bool get_write) {int err; - err =mnt_want_write (path->mnt); -if (err) -return err; +if (get_write == true) { + err =mnt_want_write (path->mnt); +if (err) +return err; + } err =vfs_removexattr (idmap, path->dentry, attr_name); -mnt_drop_write (path->mnt); + +if (get_write == true) +mnt_drop_write (path->mnt);return err; }
@@ -1380,7 +1385,7 @@ int ksmbd_vfs_remove_sd_xattrs(struct mnt_idmap *idmap, const struct path *path)ksmbd_debug (SMB ,"%s, len %zd\n" , name,strlen (name));if (!strncmp (name,XATTR_NAME_SD ,XATTR_NAME_SD_LEN )) { - err =ksmbd_vfs_remove_xattr (idmap, path, name); + err =ksmbd_vfs_remove_xattr (idmap, path, name, true);if (err)ksmbd_debug (SMB ,"remove xattr failed : %s\n" , name); }
fs/smb/server/vfs.h +2 -1
@@ -114,7 +114,8 @@ int ksmbd_vfs_setxattr(struct mnt_idmap *idmap,int ksmbd_vfs_xattr_stream_name (char *stream_name,char **xattr_stream_name,size_t *xattr_stream_name_size,int s_type);int ksmbd_vfs_remove_xattr (struct mnt_idmap *idmap, -const struct path *path,char *attr_name); +const struct path *path,char *attr_name, +bool get_write);int ksmbd_vfs_kern_path_locked (struct ksmbd_work *work,char *name,unsigned int flags,struct path *parent_path,struct path *path,bool caseless);
fs/smb/server/vfs_cache.c +2 -1
@@ -254,7 +254,8 @@ static void __ksmbd_inode_close(struct ksmbd_file *fp) ci->m_flags &= ~S_DEL_ON_CLS_STREAM ; err =ksmbd_vfs_remove_xattr (file_mnt_idmap (filp), &filp->f_path, - fp->stream.name); + fp->stream.name, + true);if (err)pr_err ("remove xattr failed : %s\n" , fp->stream.name);