[RFC PATCH] ext4: Error handling for ext4_get_inode_loc()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The use of "ext4_get_inode_loc()" inside
"ext4_xattr_inode_dec_ref_all()" lacks of proper error handling. If it
can't find correct "loc" for "parent" inode, the value of "end" can't be
guaranteed as valid.

Link: https://scan5.scan.coverity.com/#/project-view/36179/10063?selectedIssue=1645904
Signed-off-by: I Hsin Cheng <richard120310@xxxxxxxxx>
---
I wonder if there's an default value for "end" ? so we can still loop
through certain amount of inode without return directly from the error.
If we use "iloc" from with ext4_get_inode_loc() return an error, it
might corrupt some inodes it shouldn't be able to.

Wish to know what's the correct and thorough error handling here, I'll
make the change if it's possible. Or it's guaranteed that the error
never occurs?

Best regards,
I Hsin Cheng
---
 fs/ext4/xattr.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
index 7ab8f2e8e815..416500ae5248 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -1169,7 +1169,11 @@ ext4_xattr_inode_dec_ref_all(handle_t *handle, struct inode *parent,
 	if (block_csum)
 		end = (void *)bh->b_data + bh->b_size;
 	else {
-		ext4_get_inode_loc(parent, &iloc);
+		err = ext4_get_inode_loc(parent, &iloc);
+		if (err) {
+			EXT4_ERROR_INODE(parent, "inode loc (error %d)", err);
+			return;
+		}
 		end = (void *)ext4_raw_inode(&iloc) + EXT4_SB(parent->i_sb)->s_inode_size;
 	}
 
-- 
2.43.0





[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux