gfs2: bypass signal_our_withdraw if no journal
authorBob Peterson <rpeterso@redhat.com>
Fri, 12 Mar 2021 12:58:54 +0000 (07:58 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Mar 2021 09:51:13 +0000 (10:51 +0100)
commit4da985773cbb92cbf9659bdddf9789d699b5bfc6
tree092a1c970bd0b1e327336be142bb0870b04d12b7
parent0b150ae395ce1b73867981efc7537fd092ca3de1
gfs2: bypass signal_our_withdraw if no journal

[ Upstream commit d5bf630f355d8c532bef2347cf90e8ae60a5f1bd ]

Before this patch, function signal_our_withdraw referenced the journal
inode immediately. But corrupt file systems may have some invalid
journals, in which case our attempt to read it in will withdraw and the
resulting signal_our_withdraw would dereference the NULL value.

This patch adds a check to signal_our_withdraw so that if the journal
has not yet been initialized, it simply returns and does the old-style
withdraw.

Thanks, Andy Price, for his analysis.

Reported-by: syzbot+50a8a9cf8127f2c6f5df@syzkaller.appspotmail.com
Fixes: 601ef0d52e96 ("gfs2: Force withdraw to replay journals and wait for it to finish")
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/gfs2/util.c