fsck.f2fs: do xnid sanity check only during fsck
authorChao Yu <yuchao0@huawei.com>
Sun, 1 Nov 2020 12:53:31 +0000 (20:53 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 7 Dec 2020 17:25:14 +0000 (09:25 -0800)
commitc954e7cc4ba79a7fedef7dd66c8993381172d78e
tree4de20a56597c113e31daaadfdfd710076e1f3c98
parent1bfc17340d3276bd5ce050211cd25dad894485b3
fsck.f2fs: do xnid sanity check only during fsck

As Eric reported:

Commit 7a22451bc2b4 ("fsck.f2fs: fix to check validation of i_xattr_nid")

This commit caused a regression where 'dump.f2fs -i <inode> <device>'
now segfaults if the inode has any extended attributes.

It's because read_all_xattrs() now calls fsck_sanity_check_nid(), which
eventually dereferences f2fs_fsck::main_area_bitmap, which is NULL.

I'm not sure what was intended here.

Here's the output from gdb:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7f750fa in f2fs_test_bit (nr=1024, p=0x0) at libf2fs.c:304
304 return (mask & *addr) != 0;
(gdb) bt
    ntype=TYPE_XATTR, ni=0x7fffffffdd20) at fsck.c:449
    ntype=TYPE_XATTR, ni=0x7fffffffdd20) at fsck.c:495

fsck_sanity_check_nid() should only called from fsck.f2fs context, rather
than dump.f2fs, otherwise it may cause dereferencing structure fields of
fsck incorrectly.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
fsck/xattr.c