1. 14 Nov, 2022 21 commits
  2. 12 Nov, 2022 16 commits
  3. 26 Oct, 2022 1 commit
    • Nathan Chancellor's avatar
      fs/ntfs3: Don't use uni1 uninitialized in ntfs_d_compare() · 0d6d7c61
      Nathan Chancellor authored
      Clang warns:
      
        fs/ntfs3/namei.c:445:7: error: variable 'uni1' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]
                        if (toupper(c1) != toupper(c2)) {
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
        ./include/linux/ctype.h:64:20: note: expanded from macro 'toupper'
        #define toupper(c) __toupper(c)
                          ^
        fs/ntfs3/namei.c:487:12: note: uninitialized use occurs here
                __putname(uni1);
                          ^~~~
        ./include/linux/fs.h:2789:65: note: expanded from macro '__putname'
        #define __putname(name)         kmem_cache_free(names_cachep, (void *)(name))
                                                                              ^~~~
        fs/ntfs3/namei.c:445:3: note: remove the 'if' if its condition is always false
                        if (toupper(c1) != toupper(c2)) {
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        fs/ntfs3/namei.c:434:7: error: variable 'uni1' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]
                        if (!lm--) {
                            ^~~~~
        fs/ntfs3/namei.c:487:12: note: uninitialized use occurs here
                __putname(uni1);
                          ^~~~
        ./include/linux/fs.h:2789:65: note: expanded from macro '__putname'
        #define __putname(name)         kmem_cache_free(names_cachep, (void *)(name))
                                                                              ^~~~
        fs/ntfs3/namei.c:434:3: note: remove the 'if' if its condition is always false
                        if (!lm--) {
                        ^~~~~~~~~~~~
        fs/ntfs3/namei.c:430:22: note: initialize the variable 'uni1' to silence this warning
                struct cpu_str *uni1, *uni2;
                                    ^
                                    = NULL
        2 errors generated.
      
      There is no point in calling __putname() in these particular error
      paths, as there has been no corresponding __getname() call yet. Just
      return directly in these blocks to clear up the warning.
      
      Fixes: a3a956c7 ("fs/ntfs3: Add option "nocase"")
      Link: https://github.com/ClangBuiltLinux/linux/issues/1729Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      0d6d7c61
  4. 30 Sep, 2022 2 commits
    • Yuan Can's avatar
      fs/ntfs3: Use strcmp to determine attribute type · d45da67c
      Yuan Can authored
      The way of determin attribute type is just matching
      name with the predefined string, do this with strcmp
      to simplify the code.
      Signed-off-by: default avatarYuan Can <yuancan@huawei.com>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      d45da67c
    • Hawkins Jiawei's avatar
      fs/ntfs3: Fix slab-out-of-bounds read in run_unpack · 887bfc54
      Hawkins Jiawei authored
      Syzkaller reports slab-out-of-bounds bug as follows:
      ==================================================================
      BUG: KASAN: slab-out-of-bounds in run_unpack+0x8b7/0x970 fs/ntfs3/run.c:944
      Read of size 1 at addr ffff88801bbdff02 by task syz-executor131/3611
      
      [...]
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
       print_address_description mm/kasan/report.c:317 [inline]
       print_report.cold+0x2ba/0x719 mm/kasan/report.c:433
       kasan_report+0xb1/0x1e0 mm/kasan/report.c:495
       run_unpack+0x8b7/0x970 fs/ntfs3/run.c:944
       run_unpack_ex+0xb0/0x7c0 fs/ntfs3/run.c:1057
       ntfs_read_mft fs/ntfs3/inode.c:368 [inline]
       ntfs_iget5+0xc20/0x3280 fs/ntfs3/inode.c:501
       ntfs_loadlog_and_replay+0x124/0x5d0 fs/ntfs3/fsntfs.c:272
       ntfs_fill_super+0x1eff/0x37f0 fs/ntfs3/super.c:1018
       get_tree_bdev+0x440/0x760 fs/super.c:1323
       vfs_get_tree+0x89/0x2f0 fs/super.c:1530
       do_new_mount fs/namespace.c:3040 [inline]
       path_mount+0x1326/0x1e20 fs/namespace.c:3370
       do_mount fs/namespace.c:3383 [inline]
       __do_sys_mount fs/namespace.c:3591 [inline]
       __se_sys_mount fs/namespace.c:3568 [inline]
       __x64_sys_mount+0x27f/0x300 fs/namespace.c:3568
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x63/0xcd
       [...]
       </TASK>
      
      The buggy address belongs to the physical page:
      page:ffffea00006ef600 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x1bbd8
      head:ffffea00006ef600 order:3 compound_mapcount:0 compound_pincount:0
      flags: 0xfff00000010200(slab|head|node=0|zone=1|lastcpupid=0x7ff)
      page dumped because: kasan: bad access detected
      
      Memory state around the buggy address:
       ffff88801bbdfe00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
       ffff88801bbdfe80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      >ffff88801bbdff00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
                         ^
       ffff88801bbdff80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
       ffff88801bbe0000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ==================================================================
      
      Kernel will tries to read record and parse MFT from disk in
      ntfs_read_mft().
      
      Yet the problem is that during enumerating attributes in record,
      kernel doesn't check whether run_off field loading from the disk
      is a valid value.
      
      To be more specific, if attr->nres.run_off is larger than attr->size,
      kernel will passes an invalid argument run_buf_size in
      run_unpack_ex(), which having an integer overflow. Then this invalid
      argument will triggers the slab-out-of-bounds Read bug as above.
      
      This patch solves it by adding the sanity check between
      the offset to packed runs and attribute size.
      
      link: https://lore.kernel.org/all/0000000000009145fc05e94bd5c3@google.com/#t
      Reported-and-tested-by: syzbot+8d6fbb27a6aded64b25b@syzkaller.appspotmail.com
      Signed-off-by: default avatarHawkins Jiawei <yin31149@gmail.com>
      Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
      887bfc54