|
Jan Kara |
ab695a |
From 170417c8c7bb2cbbdd949bf5c443c0c8f24a203b Mon Sep 17 00:00:00 2001
|
|
Jan Kara |
ab695a |
From: Theodore Ts'o <tytso@mit.edu>
|
|
Jan Kara |
ab695a |
Date: Wed, 15 May 2019 00:51:19 -0400
|
|
Jan Kara |
ab695a |
Subject: [PATCH] ext4: fix block validity checks for journal inodes using
|
|
Jan Kara |
ab695a |
indirect blocks
|
|
Jan Kara |
ab695a |
Git-commit: 170417c8c7bb2cbbdd949bf5c443c0c8f24a203b
|
|
Jan Kara |
ab695a |
Patch-mainline: v5.2-rc1
|
|
Jan Kara |
ab695a |
References: bsc#1158021 CVE-2019-19319
|
|
Jan Kara |
ab695a |
|
|
Jan Kara |
ab695a |
Commit 345c0dbf3a30 ("ext4: protect journal inode's blocks using
|
|
Jan Kara |
ab695a |
block_validity") failed to add an exception for the journal inode in
|
|
Jan Kara |
ab695a |
ext4_check_blockref(), which is the function used by ext4_get_branch()
|
|
Jan Kara |
ab695a |
for indirect blocks. This caused attempts to read from the ext3-style
|
|
Jan Kara |
ab695a |
journals to fail with:
|
|
Jan Kara |
ab695a |
|
|
Jan Kara |
ab695a |
[ 848.968550] EXT4-fs error (device sdb7): ext4_get_branch:171: inode #8: block 30343695: comm jbd2/sdb7-8: invalid block
|
|
Jan Kara |
ab695a |
|
|
Jan Kara |
ab695a |
Fix this by adding the missing exception check.
|
|
Jan Kara |
ab695a |
|
|
Jan Kara |
ab695a |
Fixes: 345c0dbf3a30 ("ext4: protect journal inode's blocks using block_validity")
|
|
Jan Kara |
ab695a |
Reported-by: Arthur Marsh <arthur.marsh@internode.on.net>
|
|
Jan Kara |
ab695a |
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|
Jan Kara |
ab695a |
Acked-by: Jan Kara <jack@suse.cz>
|
|
Jan Kara |
ab695a |
|
|
Jan Kara |
ab695a |
---
|
|
Jan Kara |
ab695a |
fs/ext4/block_validity.c | 5 +++++
|
|
Jan Kara |
ab695a |
1 file changed, 5 insertions(+)
|
|
Jan Kara |
ab695a |
|
|
Jan Kara |
ab695a |
diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c
|
|
Jan Kara |
ab695a |
index 8d03550aaae3..8e83741b02e0 100644
|
|
Jan Kara |
ab695a |
--- a/fs/ext4/block_validity.c
|
|
Jan Kara |
ab695a |
+++ b/fs/ext4/block_validity.c
|
|
Jan Kara |
ab695a |
@@ -277,6 +277,11 @@ int ext4_check_blockref(const char *function, unsigned int line,
|
|
Jan Kara |
ab695a |
__le32 *bref = p;
|
|
Jan Kara |
ab695a |
unsigned int blk;
|
|
Jan Kara |
ab695a |
|
|
Jan Kara |
ab695a |
+ if (ext4_has_feature_journal(inode->i_sb) &&
|
|
Jan Kara |
ab695a |
+ (inode->i_ino ==
|
|
Jan Kara |
ab695a |
+ le32_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_journal_inum)))
|
|
Jan Kara |
ab695a |
+ return 0;
|
|
Jan Kara |
ab695a |
+
|
|
Jan Kara |
ab695a |
while (bref < p+max) {
|
|
Jan Kara |
ab695a |
blk = le32_to_cpu(*bref++);
|
|
Jan Kara |
ab695a |
if (blk &&
|
|
Jan Kara |
ab695a |
--
|
|
Jan Kara |
ab695a |
2.16.4
|
|
Jan Kara |
ab695a |
|