Add check for in-inode xattr to make sure that it is not referencing
an offset that is beyond the end of the inode.
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
lib/ext2fs/tst_csum
lib/ext2fs/tst_icount
lib/ext2fs/tst_iscan
+lib/ext2fs/tst_read_ea
lib/ext2fs/tst_super_size
lib/ext2fs/tst_types
lib/libblkid.a
goto fix;
}
+ /* Value size cannot be larger than EA space in inode */
+ if (entry->e_value_offs > storage_size ||
+ entry->e_value_offs + entry->e_value_size > storage_size) {
+ problem = PR_1_INODE_EA_BAD_VALUE;
+ goto fix;
+ }
+
hash = ext2fs_ext_attr_hash_entry(entry,
start + entry->e_value_offs);
N_("@i %i has zero length extent\n\t(@n logical @b %c, physical @b %b)\n"),
PROMPT_CLEAR, 0 },
+ /* Bad extended attribute value in inode */
+ { PR_1_INODE_EA_BAD_VALUE,
+ N_("@a in @i %i is corrupt (@n value)."),
+ PROMPT_CLEAR, 0},
+
/* Pass 1b errors */
/* Pass 1B: Rescan for duplicate/bad blocks */
/* Extent has zero length */
#define PR_1_EXTENT_LENGTH_ZERO 0x010066
+/* Bad extended attribute value in inode */
+#define PR_1_INODE_EA_BAD_VALUE 0x010070
+
+
/*
* Pass 1b errors
*/