• Randy Dunlap's avatar
    JFS: more checks for invalid superblock · 40f6090d
    Randy Dunlap authored
    commit 3bef198f upstream.
    
    syzbot is feeding invalid superblock data to JFS for mount testing.
    JFS does not check several of the fields -- just assumes that they
    are good since the JFS_MAGIC and version fields are good.
    
    In this case (syzbot reproducer), we have s_l2bsize == 0xda0c,
    pad == 0xf045, and s_state == 0x50, all of which are invalid IMO.
    Having s_l2bsize == 0xda0c causes this UBSAN warning:
      UBSAN: shift-out-of-bounds in fs/jfs/jfs_mount.c:373:25
      shift exponent -9716 is negative
    
    s_l2bsize can be tested for correctness. pad can be tested for non-0
    and punted. s_state can be tested for its valid values and punted.
    
    Do those 3 tests and if any of them fails, report the superblock as
    invalid/corrupt and let fsck handle it.
    
    With this patch, chkSuper() says this when JFS_DEBUG is enabled:
      jfs_mount: Mount Failure: superblock is corrupt!
      Mount JFS Failure: -22
      jfs_mount failed w/return code = -22
    
    The obvious problem wit...
    40f6090d
jfs_filsys.h 8.29 KB