ext4: don't try to processed freed blocks until mballoc is initialized
authorTheodore Ts'o <tytso@mit.edu>
Thu, 21 Jan 2021 17:33:20 +0000 (12:33 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Mar 2021 16:06:25 +0000 (17:06 +0100)
commit64578f9417e1e3482f3e4492496772fca130f526
tree14ebd806a1bd74cde7a57245a3f109ca261e6b14
parentd49f86e88859c6d246f5e4c4a4a03827ce5de527
ext4: don't try to processed freed blocks until mballoc is initialized

[ Upstream commit 027f14f5357279655c3ebc6d14daff8368d4f53f ]

If we try to make any changes via the journal between when the journal
is initialized, but before the multi-block allocated is initialized,
we will end up deferencing a NULL pointer when the journal commit
callback function calls ext4_process_freed_data().

The proximate cause of this failure was commit 2d01ddc86606 ("ext4:
save error info to sb through journal if available") since file system
corruption problems detected before the call to ext4_mb_init() would
result in a journal commit before we aborted the mount of the file
system.... and we would then trigger the NULL pointer deref.

Link: https://lore.kernel.org/r/YAm8qH/0oo2ofSMR@mit.edu
Reported-by: Murphy Zhou <jencce.kernel@gmail.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/ext4/super.c