mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
smb: client: fix parsing of device numbers
[ Upstream commit 663f295e35594f4c2584fc68c28546b747b637cd ] Report correct major and minor numbers from special files created with NFS reparse points. Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
0eb2b767c4
commit
bbc258dcdb
@@ -497,7 +497,7 @@ static void wsl_to_fattr(struct cifs_open_info_data *data,
|
||||
else if (!strncmp(name, SMB2_WSL_XATTR_MODE, nlen))
|
||||
fattr->cf_mode = (umode_t)le32_to_cpu(*(__le32 *)v);
|
||||
else if (!strncmp(name, SMB2_WSL_XATTR_DEV, nlen))
|
||||
fattr->cf_rdev = wsl_mkdev(v);
|
||||
fattr->cf_rdev = reparse_mkdev(v);
|
||||
} while (next);
|
||||
out:
|
||||
fattr->cf_dtype = S_DT(fattr->cf_mode);
|
||||
@@ -518,13 +518,13 @@ bool cifs_reparse_point_to_fattr(struct cifs_sb_info *cifs_sb,
|
||||
if (le16_to_cpu(buf->ReparseDataLength) != sizeof(buf->InodeType) + 8)
|
||||
return false;
|
||||
fattr->cf_mode |= S_IFCHR;
|
||||
fattr->cf_rdev = reparse_nfs_mkdev(buf);
|
||||
fattr->cf_rdev = reparse_mkdev(buf->DataBuffer);
|
||||
break;
|
||||
case NFS_SPECFILE_BLK:
|
||||
if (le16_to_cpu(buf->ReparseDataLength) != sizeof(buf->InodeType) + 8)
|
||||
return false;
|
||||
fattr->cf_mode |= S_IFBLK;
|
||||
fattr->cf_rdev = reparse_nfs_mkdev(buf);
|
||||
fattr->cf_rdev = reparse_mkdev(buf->DataBuffer);
|
||||
break;
|
||||
case NFS_SPECFILE_FIFO:
|
||||
fattr->cf_mode |= S_IFIFO;
|
||||
|
||||
@@ -18,14 +18,7 @@
|
||||
*/
|
||||
#define IO_REPARSE_TAG_INTERNAL ((__u32)~0U)
|
||||
|
||||
static inline dev_t reparse_nfs_mkdev(struct reparse_posix_data *buf)
|
||||
{
|
||||
u64 v = le64_to_cpu(*(__le64 *)buf->DataBuffer);
|
||||
|
||||
return MKDEV(v >> 32, v & 0xffffffff);
|
||||
}
|
||||
|
||||
static inline dev_t wsl_mkdev(void *ptr)
|
||||
static inline dev_t reparse_mkdev(void *ptr)
|
||||
{
|
||||
u64 v = le64_to_cpu(*(__le64 *)ptr);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user