]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - fs/f2fs/xattr.c
UBUNTU: Ubuntu-5.15.0-39.42
[mirror_ubuntu-jammy-kernel.git] / fs / f2fs / xattr.c
index 1d2d29dcd41ce0d3522a02abc61658097c8372f2..6a3b3bec7989d7d1d548a7a8db999d7d94583ebf 100644 (file)
@@ -684,8 +684,17 @@ static int __f2fs_setxattr(struct inode *inode, int index,
        }
 
        last = here;
-       while (!IS_XATTR_LAST_ENTRY(last))
+       while (!IS_XATTR_LAST_ENTRY(last)) {
+               if ((void *)(last) + sizeof(__u32) > last_base_addr ||
+                       (void *)XATTR_NEXT_ENTRY(last) > last_base_addr) {
+                       f2fs_err(F2FS_I_SB(inode), "inode (%lu) has invalid last xattr entry, entry_size: %zu",
+                                       inode->i_ino, ENTRY_SIZE(last));
+                       set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK);
+                       error = -EFSCORRUPTED;
+                       goto exit;
+               }
                last = XATTR_NEXT_ENTRY(last);
+       }
 
        newsize = XATTR_ALIGN(sizeof(struct f2fs_xattr_entry) + len + size);