diff options
author | Pali Rohár <pali@kernel.org> | 2024-10-03 21:06:34 +0200 |
---|---|---|
committer | Steve French <stfrench@microsoft.com> | 2025-04-09 15:37:26 -0500 |
commit | 12193b9801e7559745a7a3202d3d3c9265905461 (patch) | |
tree | 6ad4ac0a54bece752ad30aeb08f7fa795c009562 /fs | |
parent | 9ce7351291a6c64fa8dc36c786632ae5ded19bd5 (diff) |
cifs: Improve handling of name surrogate reparse points in reparse.c
Like previous changes for file inode.c, handle directory name surrogate
reparse points generally also in reparse.c.
Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/smb/client/reparse.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/fs/smb/client/reparse.c b/fs/smb/client/reparse.c index 1416b9ffaca1..d79d88e324f4 100644 --- a/fs/smb/client/reparse.c +++ b/fs/smb/client/reparse.c @@ -1236,16 +1236,6 @@ bool cifs_reparse_point_to_fattr(struct cifs_sb_info *cifs_sb, bool ok; switch (tag) { - case IO_REPARSE_TAG_INTERNAL: - if (!(fattr->cf_cifsattrs & ATTR_DIRECTORY)) - return false; - fallthrough; - case IO_REPARSE_TAG_DFS: - case IO_REPARSE_TAG_DFSR: - case IO_REPARSE_TAG_MOUNT_POINT: - /* See cifs_create_junction_fattr() */ - fattr->cf_mode = S_IFDIR | 0711; - break; case IO_REPARSE_TAG_LX_SYMLINK: case IO_REPARSE_TAG_LX_FIFO: case IO_REPARSE_TAG_AF_UNIX: @@ -1265,7 +1255,14 @@ bool cifs_reparse_point_to_fattr(struct cifs_sb_info *cifs_sb, fattr->cf_mode |= S_IFLNK; break; default: - return false; + if (!(fattr->cf_cifsattrs & ATTR_DIRECTORY)) + return false; + if (!IS_REPARSE_TAG_NAME_SURROGATE(tag) && + tag != IO_REPARSE_TAG_INTERNAL) + return false; + /* See cifs_create_junction_fattr() */ + fattr->cf_mode = S_IFDIR | 0711; + break; } fattr->cf_dtype = S_DT(fattr->cf_mode); |