ext4: do not allow external inodes for inline data
commit117166efb1
upstream. The inline data feature was implemented before we added support for external inodes for xattrs. It makes no sense to support that combination, but the problem is that there are a number of extended attribute checks that are skipped if e_value_inum is non-zero. Unfortunately, the inline data code is completely e_value_inum unaware, and attempts to interpret the xattr fields as if it were an inline xattr --- at which point, Hilarty Ensues. This addresses CVE-2018-11412. https://bugzilla.kernel.org/show_bug.cgi?id=199803 Reported-by: Jann Horn <jannh@google.com> Reviewed-by: Andreas Dilger <adilger@dilger.ca> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Fixes:e50e5129f3
("ext4: xattr-in-inode support") Cc: stable@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
bd713edfc8
Коммит
e81d371dac
|
@ -150,6 +150,12 @@ int ext4_find_inline_data_nolock(struct inode *inode)
|
|||
goto out;
|
||||
|
||||
if (!is.s.not_found) {
|
||||
if (is.s.here->e_value_inum) {
|
||||
EXT4_ERROR_INODE(inode, "inline data xattr refers "
|
||||
"to an external xattr inode");
|
||||
error = -EFSCORRUPTED;
|
||||
goto out;
|
||||
}
|
||||
EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here -
|
||||
(void *)ext4_raw_inode(&is.iloc));
|
||||
EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE +
|
||||
|
|
Загрузка…
Ссылка в новой задаче