• ZhangPeng's avatar
    hfs: fix OOB Read in __hfs_brec_find · 8d824e69
    ZhangPeng authored
    Syzbot reported a OOB read bug:
    
    ==================================================================
    BUG: KASAN: slab-out-of-bounds in hfs_strcmp+0x117/0x190
    fs/hfs/string.c:84
    Read of size 1 at addr ffff88807eb62c4e by task kworker/u4:1/11
    CPU: 1 PID: 11 Comm: kworker/u4:1 Not tainted
    6.1.0-rc6-syzkaller-00308-g644e9524 #0
    Workqueue: writeback wb_workfn (flush-7:0)
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x1b1/0x28e lib/dump_stack.c:106
     print_address_description+0x74/0x340 mm/kasan/report.c:284
     print_report+0x107/0x1f0 mm/kasan/report.c:395
     kasan_report+0xcd/0x100 mm/kasan/report.c:495
     hfs_strcmp+0x117/0x190 fs/hfs/string.c:84
     __hfs_brec_find+0x213/0x5c0 fs/hfs/bfind.c:75
     hfs_brec_find+0x276/0x520 fs/hfs/bfind.c:138
     hfs_write_inode+0x34c/0xb40 fs/hfs/inode.c:462
     write_inode fs/fs-writeback.c:1440 [inline]
    
    If the input inode of hfs_write_inode() is incorrect:
    struct inode
      struct hfs_inode_info
        struct hfs_cat_key
          struct hfs_name
            u8 len # len is greater than HFS_NAMELEN(31) which is the
    maximum length of an HFS filename
    
    OOB read occurred:
    hfs_write_inode()
      hfs_brec_find()
        __hfs_brec_find()
          hfs_cat_keycmp()
            hfs_strcmp() # OOB read occurred due to len is too large
    
    Fix this by adding a Check on len in hfs_write_inode() before calling
    hfs_brec_find().
    
    Link: https://lkml.kernel.org/r/20221130065959.2168236-1-zhangpeng362@huawei.comSigned-off-by: default avatarZhangPeng <zhangpeng362@huawei.com>
    Reported-by: <syzbot+e836ff7133ac02be825f@syzkaller.appspotmail.com>
    Cc: Damien Le Moal <damien.lemoal@opensource.wdc.com>
    Cc: Ira Weiny <ira.weiny@intel.com>
    Cc: Jeff Layton <jlayton@kernel.org>
    Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Nanyong Sun <sunnanyong@huawei.com>
    Cc: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    8d824e69
inode.c 18.7 KB