Re: [PATCH] smb: client: set SB_I_NODEV to prevent device node injection
Steve French <[email protected]> Tue, 14 Jul 2026 16:43:11 -0500
| Newsgroups | gmane.linux.kernel.stable,gmane.linux.kernel.cifs,gmane.linux.kernel,gmane.network.samba.internals,gmane.linux.file-systems |
|---|---|
| Message-ID | <CAH2r5ms-_Z1c3twqt8i_syyXpi1jtBJm15GuvRhUXEk8BVwAQw@mail.gmail.com> |
If this is needed for cifs.ko wouldn't this also be needed for AFS, NFS, CEPH and others? On Tue, Jul 14, 2026 at 11:23=E2=80=AFAM Manthey, Norbert <nmanthey@amazon.= de> wrote: > > Hi Steve, > > The issue is that the client takes the device node's mode straight > from the server. So a malicious/compromised SMB server can define a > device node (type + major/minor + permissions) on the client that the > admin never created and cannot otherwise constrain -- the only knob > left to block it is the "nodev" mount option. That's why we introduce > the change using SB_I_NODEV here. > > We did analyze the CIFS code, and found this missing security checks. > We have a reproducer that allows a malicious server and local user to > elevate privileges by introducing a new device in the mount. > > Best, > Norbert > > ________________________________________ > From: Steve French <[email protected]> > Sent: Thursday, July 9, 2026 7:20 PM > To: Doebel, Bjoern <[email protected]> > Cc: Paulo Alcantara <[email protected]>; Ronnie Sahlberg <ronniesahlberg@g= mail.com>; Shyam Prasad N <[email protected]>; Tom Talpey <[email protected]= om>; Bharath SM <[email protected]>; [email protected] <linu= [email protected]>; [email protected] <[email protected]= rnel.org>; [email protected] <[email protected]= >; [email protected] <[email protected]>; Manthey, Norbert <nmant= [email protected]>; linux-fsdevel <[email protected]> > Subject: RE: [EXTERNAL] [PATCH] smb: client: set SB_I_NODEV to prevent de= vice node injection > > CAUTION: This email originated from outside of the organization. Do not c= lick links or open attachments unless you can confirm the sender and know t= he content is safe. > > > > Setting SB_I_NODEV is apparently not done for any remote filesystems, > and AI search confirmed that it probably isn't a good idea to set it > for remote fs. It is more of a thing in pseudofilesystems and not > needed for network filesystems. > > e.g. > > "Is there any benefit to setting SB_I_NODEV? > > Today, probably not.If you grep the kernel, you'll find SB_I_NODEV is > used in only a handful of places, and those places generally involve > pseudo-filesystems or internal VFS assumptions rather than remote > storage. Setting it on CIFS or NFS is unlikely to change behavior, > because those filesystems have worked correctly for decades without > it. Most remote filesystems don't set s_iflags because almost none of > the SB_I_* flags are intended as generic filesystem capability flags. > They're mostly internal VFS state, and SB_I_NODEV in particular has a > very specific purpose. SB_I_NODEV does not mean "this filesystem > contains no device nodes." It means something closer to: This > superblock is not associated with a block device. > or more precisely: The VFS should not expect a backing struct > block_device for this superblock." > > Has something changed? How did this question about SB_I_NODEV come up? > > On Thu, Jul 9, 2026 at 11:05=E2=80=AFAM Bjoern Doebel <[email protected]> = wrote: > > > > From: Norbert Manthey <[email protected]> > > > > Set SB_I_NODEV on the superblock by default for CIFS mounts. This is > > consistent with how other filesystems handle untrusted remote content > > and prevents the server side from injecting device nodes on the client. > > > > Fixes: 2e4564b31b645 ("smb3: add support for stat of WSL reparse points= for special file types") > > Signed-off-by: Norbert Manthey <[email protected]> > > Assisted-by: Kiro:claude-opus-4.6 > > Cc: [email protected] > > --- > > fs/smb/client/cifsfs.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/fs/smb/client/cifsfs.c b/fs/smb/client/cifsfs.c > > index ea4fc0fa68cac..35eee2f9899d5 100644 > > --- a/fs/smb/client/cifsfs.c > > +++ b/fs/smb/client/cifsfs.c > > @@ -208,6 +208,9 @@ cifs_read_super(struct super_block *sb) > > if (sbflags & CIFS_MOUNT_POSIXACL) > > sb->s_flags |=3D SB_POSIXACL; > > > > + /* Prevent device node opens from remote filesystem by default = */ > > + sb->s_iflags |=3D SB_I_NODEV; > > + > > if (tcon->snapshot_time) > > sb->s_flags |=3D SB_RDONLY; > > > > -- > > 2.50.1 > > > > > > > -- > Thanks, > > Steve --=20 Thanks, Steve