FAILED: patch "[PATCH] smb: client: fix file type corruption in" 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 65d5dbdc089be42fc48a6f77bc6b648307f34b17
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026091645-lip-thinness-9a03@gregkh' --subject-prefix 'PATCH 5.15.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 65d5dbdc089be42fc48a6f77bc6b648307f34b17 Mon Sep 17 00:00:00 2001
From: Paulo Alcantara <[email protected]>
Date: Sun, 6 Sep 2026 16:01:16 -0300
Subject: [PATCH] smb: client: fix file type corruption in
posix_reparse_to_fattr()
Setting the file type in cf_mode without clearing the existing S_IFMT bits first is wrong as it corrupts the file type when cf_mode already has type bits set (e.g. S_IFREG | S_IFCHR == S_IFLNK).
Use a local ftype variable to collect the new file type and apply it after validation succeeds, clearing S_IFMT and setting the new type in a single assignment. This avoids stripping cf_mode on malformed reparse points where the function returns false early.
fs/smb/client/reparse.c +7 -5
@@ -1212,6 +1212,7 @@ static bool posix_reparse_to_fattr(struct cifs_sb_info *cifs_sb, struct cifs_open_info_data *data) {struct reparse_nfs_data_buffer *buf = (struct reparse_nfs_data_buffer *)data->reparse.buf; +umode_t ftype;if (buf ==NULL )return true;
@@ -1227,7 +1228,7 @@ static bool posix_reparse_to_fattr(struct cifs_sb_info *cifs_sb,WARN_ON_ONCE (1 );return false; } - fattr->cf_mode |=S_IFCHR ; + ftype =S_IFCHR ; fattr->cf_rdev =reparse_mkdev (buf->DataBuffer);break ;case NFS_SPECFILE_BLK :
@@ -1235,22 +1236,23 @@ static bool posix_reparse_to_fattr(struct cifs_sb_info *cifs_sb,WARN_ON_ONCE (1 );return false; } - fattr->cf_mode |=S_IFBLK ; + ftype =S_IFBLK ; fattr->cf_rdev =reparse_mkdev (buf->DataBuffer);break ;case NFS_SPECFILE_FIFO : - fattr->cf_mode |=S_IFIFO ; + ftype =S_IFIFO ;break ;case NFS_SPECFILE_SOCK : - fattr->cf_mode |=S_IFSOCK ; + ftype =S_IFSOCK ;break ;case NFS_SPECFILE_LNK : - fattr->cf_mode |=S_IFLNK ; + ftype =S_IFLNK ;break ;default :WARN_ON_ONCE (1 );return false; } + fattr->cf_mode = (fattr->cf_mode & ~S_IFMT ) | ftype;return true; }