]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ntfs: validate WSL EA payload sizes
authorHyunchul Lee <hyc.lee@gmail.com>
Mon, 9 Mar 2026 04:06:51 +0000 (13:06 +0900)
committerNamjae Jeon <linkinjeon@kernel.org>
Mon, 16 Mar 2026 11:27:34 +0000 (20:27 +0900)
Enforce the exact-size reads for $LXUID, $LXGID, $LXMOD, $LXDEV.

Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/ntfs/ea.c

index 386eb0c5f303dec6e20362edd09f58afb029914c..d479bf3608c8576fcb1258f40b9ef7a69d4d005d 100644 (file)
@@ -365,6 +365,8 @@ int ntfs_ea_get_wsl_inode(struct inode *inode, dev_t *rdevp, unsigned int flags)
                                sizeof(v));
                if (err < 0)
                        return err;
+               if (err != sizeof(v))
+                       return -EIO;
                i_uid_write(inode, le32_to_cpu(v));
        }
 
@@ -374,12 +376,14 @@ int ntfs_ea_get_wsl_inode(struct inode *inode, dev_t *rdevp, unsigned int flags)
                                sizeof(v));
                if (err < 0)
                        return err;
+               if (err != sizeof(v))
+                       return -EIO;
                i_gid_write(inode, le32_to_cpu(v));
        }
 
        /* Load mode to lxmod EA */
        err = ntfs_get_ea(inode, "$LXMOD", sizeof("$LXMOD") - 1, &v, sizeof(v));
-       if (err > 0) {
+       if (err == sizeof(v)) {
                inode->i_mode = le32_to_cpu(v);
        } else {
                /* Everyone gets all permissions. */
@@ -388,7 +392,7 @@ int ntfs_ea_get_wsl_inode(struct inode *inode, dev_t *rdevp, unsigned int flags)
 
        /* Load mode to lxdev EA */
        err = ntfs_get_ea(inode, "$LXDEV", sizeof("$LXDEV") - 1, &v, sizeof(v));
-       if (err > 0)
+       if (err == sizeof(v))
                *rdevp = le32_to_cpu(v);
        err = 0;