From 36f2d8244913402ca09a0243418a051fb5ca5160 Mon Sep 17 00:00:00 2001 From: "zhangyi (F)" Date: Wed, 28 Aug 2019 16:34:13 +0800 Subject: [PATCH] ext4: fix suspicious RCU usage warning in ext4_release_system_zone hulk inclusion category: bugfix bugzilla: 18685 CVE: NA ----------------------------- The rcu_dereference() should be used under rcu_read_lock(), or else it will complain about it may be a suspicious RCU usage. WARNING: suspicious RCU usage [...] ----------------------------- fs/ext4/block_validity.c:331 suspicious rcu_dereference_check() usage! [...] Because ext4_release_system_zone() always under protection of sb->s_umount, so the proper fix is switch to use rcu_dereference_protected() instead. Fixes: fb9fd3ade129be ("ext4: fix potential use after free in system zone via remount with noblock_validity") Reviewed-by: ZhangXiaoxu Signed-off-by: zhangyi (F) Signed-off-by: Yang Yingliang Reviewed-by: Yi Zhang Signed-off-by: Yang Yingliang --- fs/ext4/block_validity.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c index 003dc1dc2da3..d4d4fdfac1a6 100644 --- a/fs/ext4/block_validity.c +++ b/fs/ext4/block_validity.c @@ -330,7 +330,8 @@ void ext4_release_system_zone(struct super_block *sb) { struct ext4_system_blocks *system_blks; - system_blks = rcu_dereference(EXT4_SB(sb)->system_blks); + system_blks = rcu_dereference_protected(EXT4_SB(sb)->system_blks, + lockdep_is_held(&sb->s_umount)); rcu_assign_pointer(EXT4_SB(sb)->system_blks, NULL); if (system_blks) -- GitLab