• Martin Blumenstingl's avatar
    f2fs: fix validation of the block count in sanity_check_raw_super · c5e4022f
    Martin Blumenstingl authored
    commit 88960068 upstream.
    
    Treat "block_count" from struct f2fs_super_block as 64-bit little endian
    value in sanity_check_raw_super() because struct f2fs_super_block
    declares "block_count" as "__le64".
    
    This fixes a bug where the superblock validation fails on big endian
    devices with the following error:
      F2FS-fs (sda1): Wrong segment_count / block_count (61439 > 0)
      F2FS-fs (sda1): Can't find valid F2FS filesystem in 1th superblock
      F2FS-fs (sda1): Wrong segment_count / block_count (61439 > 0)
      F2FS-fs (sda1): Can't find valid F2FS filesystem in 2th superblock
    As result of this the partition cannot be mounted.
    
    With this patch applied the superblock validation works fine and the
    partition can be mounted again:
      F2FS-fs (sda1): Mounted with checkpoint version = 7c84
    
    My little endian x86-64 hardware was able to mount the partition without
    this fix.
    To confirm that mounting f2fs filesystems works on big endian machines
    again I tested this on a 32-bit MIPS big endian (lantiq) device.
    
    Fixes: 0cfe75c5 ("f2fs: enhance sanity_check_raw_super() to avoid potential overflows")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarMartin Blumenstingl <martin.blumenstingl@googlemail.com>
    Reviewed-by: default avatarChao Yu <yuchao0@huawei.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    c5e4022f
super.c 70.7 KB