]> www.infradead.org Git - linux.git/commitdiff
smb: client: fix parsing of device numbers
authorPaulo Alcantara <pc@manguebit.com>
Thu, 19 Sep 2024 00:57:43 +0000 (21:57 -0300)
committerSteve French <stfrench@microsoft.com>
Wed, 25 Sep 2024 02:51:48 +0000 (21:51 -0500)
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>
fs/smb/client/reparse.c
fs/smb/client/reparse.h

index 63984796721a50a8cdaaa53f7570cd4222852f98..3b48a093cfb1f816efc221f57849caa9b7f54e9f 100644 (file)
@@ -468,7 +468,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);
@@ -485,11 +485,11 @@ bool cifs_reparse_point_to_fattr(struct cifs_sb_info *cifs_sb,
                switch (le64_to_cpu(buf->InodeType)) {
                case NFS_SPECFILE_CHR:
                        fattr->cf_mode |= S_IFCHR;
-                       fattr->cf_rdev = reparse_nfs_mkdev(buf);
+                       fattr->cf_rdev = reparse_mkdev(buf->DataBuffer);
                        break;
                case NFS_SPECFILE_BLK:
                        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;
index 2c0644bc4e65a7e1acaed6f5415f917d5b8a62d5..158e7b7aae646c5544064d8b264726fa8b6e99e3 100644 (file)
  */
 #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);