Re: [PATCH RESEND 06/11] cifs: Validate presence of EA $LXMOD for WSL reparse points
Steve French <[email protected]>
| Newsgroups | org.kernel.vger.linux-cifs |
|---|---|
| Message-ID | <CAH2r5mu4LK8cgWHDb_EUpUHkZdD1EtoJcp_c7Zv0KGmibW+=2Q@mail.gmail.com> |
Without this change would Linux client recognize it more accurately? On Mon, Jul 6, 2026 at 5:39 PM Pali Rohár <[email protected]> wrote: > > With this change applied, such nodes are recognized as "regular files" same as in WSL. > > On Monday 06 July 2026 17:30:35 Steve French wrote: > > If this EA is missing, does Linux client still recognize it (not > > talking about WSL just what Linux client would see)? > > > > On Mon, Jul 6, 2026 at 1:51 PM Pali Rohár <[email protected]> wrote: > > > > > > S_DT part of xattr $LXMOD is mandatory for all WSL reparse points except the > > > WSL symlink and Win32 socket. Microsoft WSL subsystem does not recognize > > > them without xattr $LXMOD too, and treat such inodes as regular files. > > > > > > Fixes: ef201e8759d2 ("cifs: Validate EAs for WSL reparse points") > > > Fixes: 78e26bec4d6d ("smb: client: parse uid, gid, mode and dev from WSL reparse points") > > > Signed-off-by: Pali Rohár <[email protected]> > > > --- > > > fs/smb/client/reparse.c | 12 ++++++++++++ > > > 1 file changed, 12 insertions(+) > > > > > > diff --git a/fs/smb/client/reparse.c b/fs/smb/client/reparse.c > > > index 49a6a0cc2b61..99e93b56374f 100644 > > > --- a/fs/smb/client/reparse.c > > > +++ b/fs/smb/client/reparse.c > > > @@ -1124,6 +1124,7 @@ static bool wsl_to_fattr(struct cifs_open_info_data *data, > > > { > > > struct smb2_file_full_ea_info *ea; > > > bool ignore_missing_eas = false; > > > + bool have_xattr_mode = false; > > > bool have_xattr_dev = false; > > > umode_t reparse_mode_type = 0; > > > u32 next = 0; > > > @@ -1183,6 +1184,7 @@ static bool wsl_to_fattr(struct cifs_open_info_data *data, > > > if (S_DT(reparse_mode_type) != S_DT(le32_to_cpu(*(__le32 *)v))) > > > return false; > > > fattr->cf_mode = (umode_t)le32_to_cpu(*(__le32 *)v); > > > + have_xattr_mode = true; > > > } else if (!strncmp(name, SMB2_WSL_XATTR_DEV, nlen)) { > > > fattr->cf_rdev = reparse_mkdev(v); > > > have_xattr_dev = true; > > > @@ -1194,6 +1196,16 @@ static bool wsl_to_fattr(struct cifs_open_info_data *data, > > > if (!have_xattr_dev && (tag == IO_REPARSE_TAG_LX_CHR || tag == IO_REPARSE_TAG_LX_BLK)) > > > return ignore_missing_eas; > > > > > > + /* > > > + * S_DT part of xattr MODE is mandatory for all WSL reparse points except the WSL symlink. > > > + * Microsoft WSL does not recognize them without xattr MODE too (except the WSL symlink). > > > + * IO_REPARSE_TAG_AF_UNIX is here an exception because this reparse point is used by both > > > + * WSL subsystem and native NT/WinAPI subsystems. And NT/WinAPI creates AF UNIX socket > > > + * without the xattr MODE and recognize it also without the xattr MODE. > > > + */ > > > + if (!have_xattr_mode && (tag != IO_REPARSE_TAG_AF_UNIX && tag != IO_REPARSE_TAG_LX_SYMLINK)) > > > + return ignore_missing_eas; > > > + > > > fattr->cf_mode |= reparse_mode_type; > > > return true; > > > } > > > -- > > > 2.20.1 > > > > > > > > > > > > -- > > Thanks, > > > > Steve -- Thanks, Steve