• Gao Xiang's avatar
    erofs: fix extended inode could cross boundary · 0dcd3c94
    Gao Xiang authored
    Each ondisk inode should be aligned with inode slot boundary
    (32-byte alignment) because of nid calculation formula, so all
    compact inodes (32 byte) cannot across page boundary. However,
    extended inode is now 64-byte form, which can across page boundary
    in principle if the location is specified on purpose, although
    it's hard to be generated by mkfs due to the allocation policy
    and rarely used by Android use case now mainly for > 4GiB files.
    
    For now, only two fields `i_ctime_nsec` and `i_nlink' couldn't
    be read from disk properly and cause out-of-bound memory read
    with random value.
    
    Let's fix now.
    
    Fixes: 431339ba ("staging: erofs: add inode operations")
    Cc: <stable@vger.kernel.org> # 4.19+
    Link: https://lore.kernel.org/r/20200729175801.GA23973@xiangao.remote.csbReviewed-by: default avatarChao Yu <yuchao0@huawei.com>
    Signed-off-by: default avatarGao Xiang <hsiangkao@redhat.com>
    0dcd3c94
inode.c 8.99 KB