Skip to content
Snippets Groups Projects
  1. Mar 03, 2025
    • Chao Yu's avatar
      f2fs: fix to wait dio completion · a70a48d9
      Chao Yu authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit 96cfeb03 upstream.
      
      It should wait all existing dio write IOs before block removal,
      otherwise, previous direct write IO may overwrite data in the
      block which may be reused by other inode.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarChao Yu <chao@kernel.org>
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
      Signed-off-by: default avatarAlva Lan <alvalan9@foxmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a70a48d9
    • Ryusuke Konishi's avatar
      nilfs2: protect access to buffers with no active references · a3178b8e
      Ryusuke Konishi authored and Frieder Schrempf's avatar Frieder Schrempf committed
      commit 367a9bffabe08c04f6d725032cce3d891b2b9e1a upstream.
      
      nilfs_lookup_dirty_data_buffers(), which iterates through the buffers
      attached to dirty data folios/pages, accesses the attached buffers without
      locking the folios/pages.
      
      For data cache, nilfs_clear_folio_dirty() may be called asynchronously
      when the file system degenerates to read only, so
      nilfs_lookup_dirty_data_buffers() still has the potential to cause use
      after free issues when buffers lose the protection of their dirty state
      midway due to this asynchronous clearing and are unintentionally freed by
      try_to_free_buffers().
      
      Eliminate this race issue by adjusting the lock section in this function.
      
      [konishi.ryusuke@gmail.com: adjusted for page/folio conversion]
      Link: https://lkml.kernel.org/r/20250107200202.6432-3-konishi.ryusuke@gmail.com
      
      
      Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
      Fixes: 8c26c4e2 ("nilfs2: fix issue with flush kernel thread after remount in RO mode because of driver's internal error or metadata corruption")
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a3178b8e
    • Ryusuke Konishi's avatar
      nilfs2: do not force clear folio if buffer is referenced · f92cb3d3
      Ryusuke Konishi authored and Frieder Schrempf's avatar Frieder Schrempf committed
      commit ca76bb226bf47ff04c782cacbd299f12ddee1ec1 upstream.
      
      Patch series "nilfs2: protect busy buffer heads from being force-cleared".
      
      This series fixes the buffer head state inconsistency issues reported by
      syzbot that occurs when the filesystem is corrupted and falls back to
      read-only, and the associated buffer head use-after-free issue.
      
      This patch (of 2):
      
      Syzbot has reported that after nilfs2 detects filesystem corruption and
      falls back to read-only, inconsistencies in the buffer state may occur.
      
      One of the inconsistencies is that when nilfs2 calls mark_buffer_dirty()
      to set a data or metadata buffer as dirty, but it detects that the buffer
      is not in the uptodate state:
      
       WARNING: CPU: 0 PID: 6049 at fs/buffer.c:1177 mark_buffer_dirty+0x2e5/0x520
        fs/buffer.c:1177
       ...
       Call Trace:
        <TASK>
        nilfs_palloc_commit_alloc_entry+0x4b/0x160 fs/nilfs2/alloc.c:598
        nilfs_ifile_create_inode+0x1dd/0x3a0 fs/nilfs2/ifile.c:73
        nilfs_new_inode+0x254/0x830 fs/nilfs2/inode.c:344
        nilfs_mkdir+0x10d/0x340 fs/nilfs2/namei.c:218
        vfs_mkdir+0x2f9/0x4f0 fs/namei.c:4257
        do_mkdirat+0x264/0x3a0 fs/namei.c:4280
        __do_sys_mkdirat fs/namei.c:4295 [inline]
        __se_sys_mkdirat fs/namei.c:4293 [inline]
        __x64_sys_mkdirat+0x87/0xa0 fs/namei.c:4293
        do_syscall_x64 arch/x86/entry/common.c:52 [inline]
        do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
        entry_SYSCALL_64_after_hwframe+0x77/0x7f
      
      The other is when nilfs_btree_propagate(), which propagates the dirty
      state to the ancestor nodes of a b-tree that point to a dirty buffer,
      detects that the origin buffer is not dirty, even though it should be:
      
       WARNING: CPU: 0 PID: 5245 at fs/nilfs2/btree.c:2089
        nilfs_btree_propagate+0xc79/0xdf0 fs/nilfs2/btree.c:2089
       ...
       Call Trace:
        <TASK>
        nilfs_bmap_propagate+0x75/0x120 fs/nilfs2/bmap.c:345
        nilfs_collect_file_data+0x4d/0xd0 fs/nilfs2/segment.c:587
        nilfs_segctor_apply_buffers+0x184/0x340 fs/nilfs2/segment.c:1006
        nilfs_segctor_scan_file+0x28c/0xa50 fs/nilfs2/segment.c:1045
        nilfs_segctor_collect_blocks fs/nilfs2/segment.c:1216 [inline]
        nilfs_segctor_collect fs/nilfs2/segment.c:1540 [inline]
        nilfs_segctor_do_construct+0x1c28/0x6b90 fs/nilfs2/segment.c:2115
        nilfs_segctor_construct+0x181/0x6b0 fs/nilfs2/segment.c:2479
        nilfs_segctor_thread_construct fs/nilfs2/segment.c:2587 [inline]
        nilfs_segctor_thread+0x69e/0xe80 fs/nilfs2/segment.c:2701
        kthread+0x2f0/0x390 kernel/kthread.c:389
        ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
        ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
        </TASK>
      
      Both of these issues are caused by the callbacks that handle the
      page/folio write requests, forcibly clear various states, including the
      working state of the buffers they hold, at unexpected times when they
      detect read-only fallback.
      
      Fix these issues by checking if the buffer is referenced before clearing
      the page/folio state, and skipping the clear if it is.
      
      [konishi.ryusuke@gmail.com: adjusted for page/folio conversion]
      Link: https://lkml.kernel.org/r/20250107200202.6432-1-konishi.ryusuke@gmail.com
      Link: https://lkml.kernel.org/r/20250107200202.6432-2-konishi.ryusuke@gmail.com
      
      
      Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
      Reported-by: default avatar <syzbot+b2b14916b77acf8626d7@syzkaller.appspotmail.com>
      Closes: https://syzkaller.appspot.com/bug?extid=b2b14916b77acf8626d7
      
      
      Reported-by: default avatar <syzbot+d98fd19acd08b36ff422@syzkaller.appspotmail.com>
      Link: https://syzkaller.appspot.com/bug?extid=d98fd19acd08b36ff422
      
      
      Fixes: 8c26c4e2 ("nilfs2: fix issue with flush kernel thread after remount in RO mode because of driver's internal error or metadata corruption")
      Tested-by: default avatar <syzbot+b2b14916b77acf8626d7@syzkaller.appspotmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f92cb3d3
    • Ryusuke Konishi's avatar
      nilfs2: do not output warnings when clearing dirty buffers · 6972bd36
      Ryusuke Konishi authored and Frieder Schrempf's avatar Frieder Schrempf committed
      commit 299910dc upstream.
      
      After detecting file system corruption and degrading to a read-only mount,
      dirty folios and buffers in the page cache are cleared, and a large number
      of warnings are output at that time, often filling up the kernel log.
      
      In this case, since the degrading to a read-only mount is output to the
      kernel log, these warnings are not very meaningful, and are rather a
      nuisance in system management and debugging.
      
      The related nilfs2-specific page/folio routines have a silent argument
      that suppresses the warning output, but since it is not currently used
      meaningfully, remove both the silent argument and the warning output.
      
      [konishi.ryusuke@gmail.com: adjusted for page/folio conversion]
      Link: https://lkml.kernel.org/r/20240816090128.4561-1-konishi.ryusuke@gmail.com
      
      
      Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Stable-dep-of: ca76bb226bf4 ("nilfs2: do not force clear folio if buffer is referenced")
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6972bd36
    • Filipe Manana's avatar
      btrfs: fix hole expansion when writing at an offset beyond EOF · 272daf41
      Filipe Manana authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit da2dccd7451de62b175fb8f0808d644959e964c7 upstream.
      
      At btrfs_write_check() if our file's i_size is not sector size aligned and
      we have a write that starts at an offset larger than the i_size that falls
      within the same page of the i_size, then we end up not zeroing the file
      range [i_size, write_offset).
      
      The code is this:
      
          start_pos = round_down(pos, fs_info->sectorsize);
          oldsize = i_size_read(inode);
          if (start_pos > oldsize) {
              /* Expand hole size to cover write data, preventing empty gap */
              loff_t end_pos = round_up(pos + count, fs_info->sectorsize);
      
              ret = btrfs_cont_expand(BTRFS_I(inode), oldsize, end_pos);
              if (ret)
                  return ret;
          }
      
      So if our file's i_size is 90269 bytes and a write at offset 90365 bytes
      comes in, we get 'start_pos' set to 90112 bytes, which is less than the
      i_size and therefore we don't zero out the range [90269, 90365) by
      calling btrfs_cont_expand().
      
      This is an old bug introduced in commit 9036c102 ("Btrfs: update hole
      handling v2"), from 2008, and the buggy code got moved around over the
      years.
      
      Fix this by discarding 'start_pos' and comparing against the write offset
      ('pos') without any alignment.
      
      This bug was recently exposed by test case generic/363 which tests this
      scenario by polluting ranges beyond EOF with an mmap write and than verify
      that after a file increases we get zeroes for the range which is supposed
      to be a hole and not what we wrote with the previous mmaped write.
      
      We're only seeing this exposed now because generic/363 used to run only
      on xfs until last Sunday's fstests update.
      
      The test was failing like this:
      
         $ ./check generic/363
         FSTYP         -- btrfs
         PLATFORM      -- Linux/x86_64 debian0 6.13.0-rc7-btrfs-next-185+ #17 SMP PREEMPT_DYNAMIC Mon Feb  3 12:28:46 WET 2025
         MKFS_OPTIONS  -- /dev/sdc
         MOUNT_OPTIONS -- /dev/sdc /home/fdmanana/btrfs-tests/scratch_1
      
         generic/363 0s ... [failed, exit status 1]- output mismatch (see /home/fdmanana/git/hub/xfstests/results//generic/363.out.bad)
      #      --- tests/generic/363.out	2025-02-05 15:31:14.013646509 +0000
      #      +++ /home/fdmanana/git/hub/xfstests/results//generic/363.out.bad	2025-02-05 17:25:33.112630781 +0000
             @@ -1 +1,46 @@
              QA output created by 363
             +READ BAD DATA: offset = 0xdcad, size = 0xd921, fname = /home/fdmanana/btrfs-tests/dev/junk
             +OFFSET      GOOD    BAD     RANGE
             +0x1609d     0x0000  0x3104  0x0
             +operation# (mod 256) for the bad data may be 4
             +0x1609e     0x0000  0x0472  0x1
             +operation# (mod 256) for the bad data may be 4
             ...
             (Run 'diff -u /home/fdmanana/git/hub/xfstests/tests/generic/363.out /home/fdmanana/git/hub/xfstests/results//generic/363.out.bad'  to see the entire diff)
         Ran: generic/363
         Failures: generic/363
         Failed 1 of 1 tests
      
      Fixes: 9036c102 ("Btrfs: update hole handling v2")
      CC: stable@vger.kernel.org
      Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      272daf41
    • Mike Marshall's avatar
      orangefs: fix a oob in orangefs_debug_write · fdbd8147
      Mike Marshall authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit f7c848431632598ff9bce57a659db6af60d75b39 ]
      
      I got a syzbot report: slab-out-of-bounds Read in
      orangefs_debug_write... several people suggested fixes,
      I tested Al Viro's suggestion and made this patch.
      
      Signed-off-by: default avatarMike Marshall <hubcap@omnibond.com>
      Reported-by: default avatar <syzbot+fc519d7875f2d9186c1f@syzkaller.appspotmail.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fdbd8147
    • Dai Ngo's avatar
      NFSD: fix hang in nfsd4_shutdown_callback · 902f78c7
      Dai Ngo authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit 036ac2778f7b28885814c6fbc07e156ad1624d03 upstream.
      
      If nfs4_client is in courtesy state then there is no point to send
      the callback. This causes nfsd4_shutdown_callback to hang since
      cl_cb_inflight is not 0. This hang lasts about 15 minutes until TCP
      notifies NFSD that the connection was dropped.
      
      This patch modifies nfsd4_run_cb_work to skip the RPC call if
      nfs4_client is in courtesy state.
      
      Signed-off-by: default avatarDai Ngo <dai.ngo@oracle.com>
      Fixes: 66af2579 ("NFSD: add courteous server support for thread with only delegation")
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      902f78c7
    • Li Lingfeng's avatar
      nfsd: clear acl_access/acl_default after releasing them · 0f4a5028
      Li Lingfeng authored and Frieder Schrempf's avatar Frieder Schrempf committed
      commit 7faf14a7b0366f153284db0ad3347c457ea70136 upstream.
      
      If getting acl_default fails, acl_access and acl_default will be released
      simultaneously. However, acl_access will still retain a pointer pointing
      to the released posix_acl, which will trigger a WARNING in
      nfs3svc_release_getacl like this:
      
      ------------[ cut here ]------------
      refcount_t: underflow; use-after-free.
      WARNING: CPU: 26 PID: 3199 at lib/refcount.c:28
      refcount_warn_saturate+0xb5/0x170
      Modules linked in:
      CPU: 26 UID: 0 PID: 3199 Comm: nfsd Not tainted
      6.12.0-rc6-00079-g04ae226af01f-dirty #8
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
      1.16.1-2.fc37 04/01/2014
      RIP: 0010:refcount_warn_saturate+0xb5/0x170
      Code: cc cc 0f b6 1d b3 20 a5 03 80 fb 01 0f 87 65 48 d8 00 83 e3 01 75
      e4 48 c7 c7 c0 3b 9b 85 c6 05 97 20 a5 03 01 e8 fb 3e 30 ff <0f> 0b eb
      cd 0f b6 1d 8a3
      RSP: 0018:ffffc90008637cd8 EFLAGS: 00010282
      RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffffffff83904fde
      RDX: dffffc0000000000 RSI: 0000000000000008 RDI: ffff88871ed36380
      RBP: ffff888158beeb40 R08: 0000000000000001 R09: fffff520010c6f56
      R10: ffffc90008637ab7 R11: 0000000000000001 R12: 0000000000000001
      R13: ffff888140e77400 R14: ffff888140e77408 R15: ffffffff858b42c0
      FS:  0000000000000000(0000) GS:ffff88871ed00000(0000)
      knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000562384d32158 CR3: 000000055cc6a000 CR4: 00000000000006f0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       <TASK>
       ? refcount_warn_saturate+0xb5/0x170
       ? __warn+0xa5/0x140
       ? refcount_warn_saturate+0xb5/0x170
       ? report_bug+0x1b1/0x1e0
       ? handle_bug+0x53/0xa0
       ? exc_invalid_op+0x17/0x40
       ? asm_exc_invalid_op+0x1a/0x20
       ? tick_nohz_tick_stopped+0x1e/0x40
       ? refcount_warn_saturate+0xb5/0x170
       ? refcount_warn_saturate+0xb5/0x170
       nfs3svc_release_getacl+0xc9/0xe0
       svc_process_common+0x5db/0xb60
       ? __pfx_svc_process_common+0x10/0x10
       ? __rcu_read_unlock+0x69/0xa0
       ? __pfx_nfsd_dispatch+0x10/0x10
       ? svc_xprt_received+0xa1/0x120
       ? xdr_init_decode+0x11d/0x190
       svc_process+0x2a7/0x330
       svc_handle_xprt+0x69d/0x940
       svc_recv+0x180/0x2d0
       nfsd+0x168/0x200
       ? __pfx_nfsd+0x10/0x10
       kthread+0x1a2/0x1e0
       ? kthread+0xf4/0x1e0
       ? __pfx_kthread+0x10/0x10
       ret_from_fork+0x34/0x60
       ? __pfx_kthread+0x10/0x10
       ret_from_fork_asm+0x1a/0x30
       </TASK>
      Kernel panic - not syncing: kernel: panic_on_warn set ...
      
      Clear acl_access/acl_default after posix_acl_release is called to prevent
      UAF from being triggered.
      
      Fixes: a257cdd0 ("[PATCH] NFSD: Add server support for NFSv3 ACLs.")
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/all/20241107014705.2509463-1-lilingfeng@huaweicloud.com/
      
      
      Signed-off-by: default avatarLi Lingfeng <lilingfeng3@huawei.com>
      Reviewed-by: default avatarRick Macklem <rmacklem@uoguelph.ca>
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0f4a5028
    • Filipe Manana's avatar
      btrfs: avoid monopolizing a core when activating a swap file · be572c76
      Filipe Manana authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit 2c8507c63f5498d4ee4af404a8e44ceae4345056 upstream.
      
      This commit re-attempts the backport of the change to the linux-6.1.y
      branch. Commit bb8e287f ("btrfs: avoid monopolizing a core when
      activating a swap file") on this branch was reverted.
      
      During swap activation we iterate over the extents of a file and we can
      have many thousands of them, so we can end up in a busy loop monopolizing
      a core. Avoid this by doing a voluntary reschedule after processing each
      extent.
      
      CC: stable@vger.kernel.org # 5.4+
      Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarKoichiro Den <koichiro.den@canonical.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      be572c76
    • Koichiro Den's avatar
      Revert "btrfs: avoid monopolizing a core when activating a swap file" · bf602cc4
      Koichiro Den authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      This reverts commit bb8e287f.
      
      The backport for linux-6.1.y, commit bb8e287f ("btrfs: avoid
      monopolizing a core when activating a swap file"), inserted
      cond_resched() in the wrong location.
      
      Revert it now; a subsequent commit will re-backport the original patch.
      
      Fixes: bb8e287f ("btrfs: avoid monopolizing a core when activating a swap file") # linux-6.1.y
      Signed-off-by: default avatarKoichiro Den <koichiro.den@canonical.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bf602cc4
    • Zizhi Wo's avatar
      cachefiles: Fix NULL pointer dereference in object->file · 3e931a29
      Zizhi Wo authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit 31ad74b20227ce6b40910ff78b1c604e42975cf1 upstream.
      
      At present, the object->file has the NULL pointer dereference problem in
      ondemand-mode. The root cause is that the allocated fd and object->file
      lifetime are inconsistent, and the user-space invocation to anon_fd uses
      object->file. Following is the process that triggers the issue:
      
      	  [write fd]				[umount]
      cachefiles_ondemand_fd_write_iter
      				       fscache_cookie_state_machine
      					 cachefiles_withdraw_cookie
        if (!file) return -ENOBUFS
      					   cachefiles_clean_up_object
      					     cachefiles_unmark_inode_in_use
      					     fput(object->file)
      					     object->file = NULL
        // file NULL pointer dereference!
        __cachefiles_write(..., file, ...)
      
      Fix this issue by add an additional reference count to the object->file
      before write/llseek, and decrement after it finished.
      
      Fixes: c8383054 ("cachefiles: notify the user daemon when looking up cookie")
      Signed-off-by: default avatarZizhi Wo <wozizhi@huawei.com>
      Link: https://lore.kernel.org/r/20241107110649.3980193-5-wozizhi@huawei.com
      
      
      Reviewed-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
      Signed-off-by: default avatarBin Lan <lanbincn@qq.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3e931a29
    • Su Yue's avatar
      ocfs2: check dir i_size in ocfs2_find_entry · 770753da
      Su Yue authored and Frieder Schrempf's avatar Frieder Schrempf committed
      commit b0fce54b8c0d8e5f2b4c243c803c5996e73baee8 upstream.
      
      syz reports an out of bounds read:
      
      ==================================================================
      BUG: KASAN: slab-out-of-bounds in ocfs2_match fs/ocfs2/dir.c:334
      [inline]
      BUG: KASAN: slab-out-of-bounds in ocfs2_search_dirblock+0x283/0x6e0
      fs/ocfs2/dir.c:367
      Read of size 1 at addr ffff88804d8b9982 by task syz-executor.2/14802
      
      CPU: 0 UID: 0 PID: 14802 Comm: syz-executor.2 Not tainted 6.13.0-rc4 #2
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1
      04/01/2014
      Sched_ext: serialise (enabled+all), task: runnable_at=-10ms
      Call Trace:
      <TASK>
      __dump_stack lib/dump_stack.c:94 [inline]
      dump_stack_lvl+0x229/0x350 lib/dump_stack.c:120
      print_address_description mm/kasan/report.c:378 [inline]
      print_report+0x164/0x530 mm/kasan/report.c:489
      kasan_report+0x147/0x180 mm/kasan/report.c:602
      ocfs2_match fs/ocfs2/dir.c:334 [inline]
      ocfs2_search_dirblock+0x283/0x6e0 fs/ocfs2/dir.c:367
      ocfs2_find_entry_id fs/ocfs2/dir.c:414 [inline]
      ocfs2_find_entry+0x1143/0x2db0 fs/ocfs2/dir.c:1078
      ocfs2_find_files_on_disk+0x18e/0x530 fs/ocfs2/dir.c:1981
      ocfs2_lookup_ino_from_name+0xb6/0x110 fs/ocfs2/dir.c:2003
      ocfs2_lookup+0x30a/0xd40 fs/ocfs2/namei.c:122
      lookup_open fs/namei.c:3627 [inline]
      open_last_lookups fs/namei.c:3748 [inline]
      path_openat+0x145a/0x3870 fs/namei.c:3984
      do_filp_open+0xe9/0x1c0 fs/namei.c:4014
      do_sys_openat2+0x135/0x1d0 fs/open.c:1402
      do_sys_open fs/open.c:1417 [inline]
      __do_sys_openat fs/open.c:1433 [inline]
      __se_sys_openat fs/open.c:1428 [inline]
      __x64_sys_openat+0x15d/0x1c0 fs/open.c:1428
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xf6/0x210 arch/x86/entry/common.c:83
      entry_SYSCALL_64_after_hwframe+0x77/0x7f
      RIP: 0033:0x7f01076903ad
      Code: c3 e8 a7 2b 00 00 0f 1f 80 00 00 00 00 f3 0f 1e fa 48 89 f8 48 89
      f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01
      f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
      RSP: 002b:00007f01084acfc8 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
      RAX: ffffffffffffffda RBX: 00007f01077cbf80 RCX: 00007f01076903ad
      RDX: 0000000000105042 RSI: 0000000020000080 RDI: ffffffffffffff9c
      RBP: 00007f01077cbf80 R08: 0000000000000000 R09: 0000000000000000
      R10: 00000000000001ff R11: 0000000000000246 R12: 0000000000000000
      R13: 00007f01077cbf80 R14: 00007f010764fc90 R15: 00007f010848d000
      </TASK>
      ==================================================================
      
      And a general protection fault in ocfs2_prepare_dir_for_insert:
      
      ==================================================================
      loop0: detected capacity change from 0 to 32768
      JBD2: Ignoring recovery information on journal
      ocfs2: Mounting device (7,0) on (node local, slot 0) with ordered data
      mode.
      Oops: general protection fault, probably for non-canonical address
      0xdffffc0000000001: 0000 [#1] PREEMPT SMP KASAN NOPTI
      KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
      CPU: 0 UID: 0 PID: 5096 Comm: syz-executor792 Not tainted
      6.11.0-rc4-syzkaller-00002-gb0da640826ba #0
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
      1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
      RIP: 0010:ocfs2_find_dir_space_id fs/ocfs2/dir.c:3406 [inline]
      RIP: 0010:ocfs2_prepare_dir_for_insert+0x3309/0x5c70 fs/ocfs2/dir.c:4280
      Code: 00 00 e8 2a 25 13 fe e9 ba 06 00 00 e8 20 25 13 fe e9 4f 01 00 00
      e8 16 25 13 fe 49 8d 7f 08 49 8d 5f 09 48 89 f8 48 c1 e8 03 <42> 0f b6
      04 20 84 c0 0f 85 bd 23 00 00 48 89 d8 48 c1 e8 03 42 0f
      RSP: 0018:ffffc9000af9f020 EFLAGS: 00010202
      RAX: 0000000000000001 RBX: 0000000000000009 RCX: ffff88801e27a440
      RDX: 0000000000000000 RSI: 0000000000000400 RDI: 0000000000000008
      RBP: ffffc9000af9f830 R08: ffffffff8380395b R09: ffffffff838090a7
      R10: 0000000000000002 R11: ffff88801e27a440 R12: dffffc0000000000
      R13: ffff88803c660878 R14: f700000000000088 R15: 0000000000000000
      FS:  000055555a677380(0000) GS:ffff888020800000(0000)
      knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000560bce569178 CR3: 000000001de5a000 CR4: 0000000000350ef0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
      <TASK>
      ocfs2_mknod+0xcaf/0x2b40 fs/ocfs2/namei.c:292
      vfs_mknod+0x36d/0x3b0 fs/namei.c:4088
      do_mknodat+0x3ec/0x5b0
      __do_sys_mknodat fs/namei.c:4166 [inline]
      __se_sys_mknodat fs/namei.c:4163 [inline]
      __x64_sys_mknodat+0xa7/0xc0 fs/namei.c:4163
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
      entry_SYSCALL_64_after_hwframe+0x77/0x7f
      RIP: 0033:0x7f2dafda3a99
      Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 f1 17 00 00 90 48 89
      f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08
      0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8
      64 89 01 48
      RSP: 002b:00007ffe336a6658 EFLAGS: 00000246 ORIG_RAX:
      0000000000000103
      RAX: ffffffffffffffda RBX: 0000000000000000 RCX:
      00007f2dafda3a99
      RDX: 00000000000021c0 RSI: 0000000020000040 RDI:
      00000000ffffff9c
      RBP: 00007f2dafe1b5f0 R08: 0000000000004480 R09:
      000055555a6784c0
      R10: 0000000000000103 R11: 0000000000000246 R12:
      00007ffe336a6680
      R13: 00007ffe336a68a8 R14: 431bde82d7b634db R15:
      00007f2dafdec03b
      </TASK>
      ==================================================================
      
      The two reports are all caused invalid negative i_size of dir inode.  For
      ocfs2, dir_inode can't be negative or zero.
      
      Here add a check in which is called by ocfs2_check_dir_for_entry().  It
      fixes the second report as ocfs2_check_dir_for_entry() must be called
      before ocfs2_prepare_dir_for_insert().  Also set a up limit for dir with
      OCFS2_INLINE_DATA_FL.  The i_size can't be great than blocksize.
      
      Link: https://lkml.kernel.org/r/20250106140640.92260-1-glass.su@suse.com
      
      
      Reported-by: default avatarJiacheng Xu <stitch@zju.edu.cn>
      Link: https://lore.kernel.org/ocfs2-devel/17a04f01.1ae74.19436d003fc.Coremail.stitch@zju.edu.cn/T/#u
      
      
      Reported-by: default avatar <syzbot+5a64828fcc4c2ad9b04f@syzkaller.appspotmail.com>
      Link: https://lore.kernel.org/all/0000000000005894f3062018caf1@google.com/T/
      
      
      Signed-off-by: default avatarSu Yue <glass.su@suse.com>
      Reviewed-by: default avatarHeming Zhao <heming.zhao@suse.com>
      Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Jun Piao <piaojun@huawei.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      770753da
    • Nikita Zhandarovich's avatar
      nilfs2: fix possible int overflows in nilfs_fiemap() · 06959f53
      Nikita Zhandarovich authored and Frieder Schrempf's avatar Frieder Schrempf committed
      commit 6438ef381c183444f7f9d1de18f22661cba1e946 upstream.
      
      Since nilfs_bmap_lookup_contig() in nilfs_fiemap() calculates its result
      by being prepared to go through potentially maxblocks == INT_MAX blocks,
      the value in n may experience an overflow caused by left shift of blkbits.
      
      While it is extremely unlikely to occur, play it safe and cast right hand
      expression to wider type to mitigate the issue.
      
      Found by Linux Verification Center (linuxtesting.org) with static analysis
      tool SVACE.
      
      Link: https://lkml.kernel.org/r/20250124222133.5323-1-konishi.ryusuke@gmail.com
      
      
      Fixes: 622daaff ("nilfs2: fiemap support")
      Signed-off-by: default avatarNikita Zhandarovich <n.zhandarovich@fintech.ru>
      Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      06959f53
    • Matthew Wilcox (Oracle)'s avatar
      ocfs2: handle a symlink read error correctly · 50ea1ab8
      Matthew Wilcox (Oracle) authored and Frieder Schrempf's avatar Frieder Schrempf committed
      commit 2b4c2094da6d84e69b843dd3317902e977bf64bd upstream.
      
      Patch series "Convert ocfs2 to use folios".
      
      Mark did a conversion of ocfs2 to use folios and sent it to me as a
      giant patch for review ;-)
      
      So I've redone it as individual patches, and credited Mark for the patches
      where his code is substantially the same.  It's not a bad way to do it;
      his patch had some bugs and my patches had some bugs.  Hopefully all our
      bugs were different from each other.  And hopefully Mark likes all the
      changes I made to his code!
      
      
      This patch (of 23):
      
      If we can't read the buffer, be sure to unlock the page before returning.
      
      Link: https://lkml.kernel.org/r/20241205171653.3179945-1-willy@infradead.org
      Link: https://lkml.kernel.org/r/20241205171653.3179945-2-willy@infradead.org
      
      
      Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Jun Piao <piaojun@huawei.com>
      Cc: Mark Tinguely <mark.tinguely@oracle.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      50ea1ab8
    • Heming Zhao's avatar
      ocfs2: fix incorrect CPU endianness conversion causing mount failure · 66a03662
      Heming Zhao authored and Frieder Schrempf's avatar Frieder Schrempf committed
      commit f921da2c34692dfec5f72b5ae347b1bea22bb369 upstream.
      
      Commit 23aab037 ("ocfs2: fix UBSAN warning in ocfs2_verify_volume()")
      introduced a regression bug.  The blksz_bits value is already converted to
      CPU endian in the previous code; therefore, the code shouldn't use
      le32_to_cpu() anymore.
      
      Link: https://lkml.kernel.org/r/20250121112204.12834-1-heming.zhao@suse.com
      
      
      Fixes: 23aab037 ("ocfs2: fix UBSAN warning in ocfs2_verify_volume()")
      Signed-off-by: default avatarHeming Zhao <heming.zhao@suse.com>
      Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Jun Piao <piaojun@huawei.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      66a03662
    • Mike Snitzer's avatar
      pnfs/flexfiles: retry getting layout segment for reads · d51388a5
      Mike Snitzer authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit eb3fabde15bccdf34f1c9b35a83aa4c0dacbb4ca upstream.
      
      If ff_layout_pg_get_read()'s attempt to get a layout segment results
      in -EAGAIN have ff_layout_pg_init_read() retry it after sleeping.
      
      If "softerr" mount is used, use 'io_maxretrans' to limit the number of
      attempts to get a layout segment.
      
      This fixes a long-standing issue of O_DIRECT reads failing with
      -EAGAIN (11) when using flexfiles Client Side Mirroring (CSM).
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
      Signed-off-by: default avatarAnna Schumaker <anna.schumaker@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d51388a5
    • Wentao Liang's avatar
      xfs: Add error handling for xfs_reflink_cancel_cow_range · 7eb45935
      Wentao Liang authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit 26b63bee2f6e711c5a169997fd126fddcfb90848 upstream.
      
      In xfs_inactive(), xfs_reflink_cancel_cow_range() is called
      without error handling, risking unnoticed failures and
      inconsistent behavior compared to other parts of the code.
      
      Fix this issue by adding an error handling for the
      xfs_reflink_cancel_cow_range(), improving code robustness.
      
      Fixes: 6231848c ("xfs: check for cow blocks before trying to clear them")
      Cc: stable@vger.kernel.org # v4.17
      Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Signed-off-by: default avatarWentao Liang <vulab@iscas.ac.cn>
      Signed-off-by: default avatarCarlos Maiolino <cem@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7eb45935
    • Dan Carpenter's avatar
      ksmbd: fix integer overflows on 32 bit systems · 7f490989
      Dan Carpenter authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit aab98e2dbd648510f8f51b83fbf4721206ccae45 upstream.
      
      On 32bit systems the addition operations in ipc_msg_alloc() can
      potentially overflow leading to memory corruption.
      Add bounds checking using KSMBD_IPC_MAX_PAYLOAD to avoid overflow.
      
      Fixes: 0626e664 ("cifsd: add server handler for central processing and tranport layers")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
      Signed-off-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7f490989
    • Dan Carpenter's avatar
      binfmt_flat: Fix integer overflow bug on 32 bit systems · baf8fb57
      Dan Carpenter authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit 55cf2f4b945f6a6416cc2524ba740b83cc9af25a upstream.
      
      Most of these sizes and counts are capped at 256MB so the math doesn't
      result in an integer overflow.  The "relocs" count needs to be checked
      as well.  Otherwise on 32bit systems the calculation of "full_data"
      could be wrong.
      
      	full_data = data_len + relocs * sizeof(unsigned long);
      
      Fixes: c995ee28 ("binfmt_flat: prevent kernel dammage from corrupted executable headers")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
      Acked-by: default avatarNicolas Pitre <npitre@baylibre.com>
      Link: https://lore.kernel.org/r/5be17f6c-5338-43be-91ef-650153b975cb@stanley.mountain
      
      
      Signed-off-by: default avatarKees Cook <kees@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      baf8fb57
    • Nam Cao's avatar
      fs/proc: do_task_stat: Fix ESP not readable during coredump · f52cebe9
      Nam Cao authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit ab251dacfbae28772c897f068a4184f478189ff2 upstream.
      
      The field "eip" (instruction pointer) and "esp" (stack pointer) of a task
      can be read from /proc/PID/stat. These fields can be interesting for
      coredump.
      
      However, these fields were disabled by commit 0a1eb2d4 ("fs/proc: Stop
      reporting eip and esp in /proc/PID/stat"), because it is generally unsafe
      to do so. But it is safe for a coredumping process, and therefore
      exceptions were made:
      
        - for a coredumping thread by commit fd7d5627 ("fs/proc: Report
          eip/esp in /prod/PID/stat for coredumping").
      
        - for all other threads in a coredumping process by commit cb8f381f
          ("fs/proc/array.c: allow reporting eip/esp for all coredumping
          threads").
      
      The above two commits check the PF_DUMPCORE flag to determine a coredump thread
      and the PF_EXITING flag for the other threads.
      
      Unfortunately, commit 92307383 ("coredump:  Don't perform any cleanups
      before dumping core") moved coredump to happen earlier and before PF_EXITING is
      set. Thus, checking PF_EXITING is no longer the correct way to determine
      threads in a coredumping process.
      
      Instead of PF_EXITING, use PF_POSTCOREDUMP to determine the other threads.
      
      Checking of PF_EXITING was added for coredumping, so it probably can now be
      removed. But it doesn't hurt to keep.
      
      Fixes: 92307383 ("coredump:  Don't perform any cleanups before dumping core")
      Cc: stable@vger.kernel.org
      Cc: Eric W. Biederman <ebiederm@xmission.com>
      Acked-by: default avatarOleg Nesterov <oleg@redhat.com>
      Acked-by: default avatarKees Cook <kees@kernel.org>
      Signed-off-by: default avatarNam Cao <namcao@linutronix.de>
      Link: https://lore.kernel.org/r/d89af63d478d6c64cc46a01420b46fd6eb147d6f.1735805772.git.namcao@linutronix.de
      
      
      Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f52cebe9
    • Meetakshi Setiya's avatar
      smb: client: change lease epoch type from unsigned int to __u16 · 81f5f4f7
      Meetakshi Setiya authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit 57e4a9bd61c308f607bc3e55e8fa02257b06b552 upstream.
      
      MS-SMB2 section 2.2.13.2.10 specifies that 'epoch' should be a 16-bit
      unsigned integer used to track lease state changes. Change the data
      type of all instances of 'epoch' from unsigned int to __u16. This
      simplifies the epoch change comparisons and makes the code more
      compliant with the protocol spec.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMeetakshi Setiya <msetiya@microsoft.com>
      Reviewed-by: default avatarShyam Prasad N <sprasad@microsoft.com>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      81f5f4f7
    • Darrick J. Wong's avatar
      xfs: don't over-report free space or inodes in statvfs · 38a3218f
      Darrick J. Wong authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit 4b8d867ca6e2fc6d152f629fdaf027053b81765a ]
      
      Emmanual Florac reports a strange occurrence when project quota limits
      are enabled, free space is lower than the remaining quota, and someone
      runs statvfs:
      
        # mkfs.xfs -f /dev/sda
        # mount /dev/sda /mnt -o prjquota
        # xfs_quota  -x -c 'limit -p bhard=2G 55' /mnt
        # mkdir /mnt/dir
        # xfs_io -c 'chproj 55' -c 'chattr +P' -c 'stat -vvvv' /mnt/dir
        # fallocate -l 19g /mnt/a
        # df /mnt /mnt/dir
        Filesystem      Size  Used Avail Use% Mounted on
        /dev/sda         20G   20G  345M  99% /mnt
        /dev/sda        2.0G     0  2.0G   0% /mnt
      
      I think the bug here is that xfs_fill_statvfs_from_dquot unconditionally
      assigns to f_bfree without checking that the filesystem has enough free
      space to fill the remaining project quota.  However, this is a
      longstanding behavior of xfs so it's unclear what to do here.
      
      Cc: <stable@vger.kernel.org> # v2.6.18
      Fixes: 932f2c32 ("[XFS] statvfs component of directory/project quota support, code originally by Glen.")
      Reported-by: default avatarEmmanuel Florac <eflorac@intellique.com>
      Signed-off-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      38a3218f
    • Darrick J. Wong's avatar
      xfs: report realtime block quota limits on realtime directories · 3648f0c4
      Darrick J. Wong authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit 9a17ebfea9d0c7e0bb7409dcf655bf982a5d6e52 ]
      
      On the data device, calling statvfs on a projinherit directory results
      in the block and avail counts being curtailed to the project quota block
      limits, if any are set.  Do the same for realtime files or directories,
      only use the project quota rt block limits.
      
      Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Stable-dep-of: 4b8d867ca6e2 ("xfs: don't over-report free space or inodes in statvfs")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3648f0c4
    • Josef Bacik's avatar
      btrfs: convert BUG_ON in btrfs_reloc_cow_block() to proper error handling · d40610da
      Josef Bacik authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit 6a4730b325aaa48f7a5d5ba97aff0a955e2d9cec ]
      
      This BUG_ON is meant to catch backref cache problems, but these can
      arise from either bugs in the backref cache or corruption in the extent
      tree.  Fix it to be a proper error.
      
      Reviewed-by: default avatarBoris Burkov <boris@bur.io>
      Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d40610da
    • Hao-ran Zheng's avatar
      btrfs: fix data race when accessing the inode's disk_i_size at btrfs_drop_extents() · c0253366
      Hao-ran Zheng authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit 5324c4e10e9c2ce307a037e904c0d9671d7137d9 ]
      
      A data race occurs when the function `insert_ordered_extent_file_extent()`
      and the function `btrfs_inode_safe_disk_i_size_write()` are executed
      concurrently. The function `insert_ordered_extent_file_extent()` is not
      locked when reading inode->disk_i_size, causing
      `btrfs_inode_safe_disk_i_size_write()` to cause data competition when
      writing inode->disk_i_size, thus affecting the value of `modify_tree`.
      
      The specific call stack that appears during testing is as follows:
      
        ============DATA_RACE============
         btrfs_drop_extents+0x89a/0xa060 [btrfs]
         insert_reserved_file_extent+0xb54/0x2960 [btrfs]
         insert_ordered_extent_file_extent+0xff5/0x1760 [btrfs]
         btrfs_finish_one_ordered+0x1b85/0x36a0 [btrfs]
         btrfs_finish_ordered_io+0x37/0x60 [btrfs]
         finish_ordered_fn+0x3e/0x50 [btrfs]
         btrfs_work_helper+0x9c9/0x27a0 [btrfs]
         process_scheduled_works+0x716/0xf10
         worker_thread+0xb6a/0x1190
         kthread+0x292/0x330
         ret_from_fork+0x4d/0x80
         ret_from_fork_asm+0x1a/0x30
        ============OTHER_INFO============
         btrfs_inode_safe_disk_i_size_write+0x4ec/0x600 [btrfs]
         btrfs_finish_one_ordered+0x24c7/0x36a0 [btrfs]
         btrfs_finish_ordered_io+0x37/0x60 [btrfs]
         finish_ordered_fn+0x3e/0x50 [btrfs]
         btrfs_work_helper+0x9c9/0x27a0 [btrfs]
         process_scheduled_works+0x716/0xf10
         worker_thread+0xb6a/0x1190
         kthread+0x292/0x330
         ret_from_fork+0x4d/0x80
         ret_from_fork_asm+0x1a/0x30
        =================================
      
      The main purpose of the check of the inode's disk_i_size is to avoid
      taking write locks on a btree path when we have a write at or beyond
      EOF, since in these cases we don't expect to find extent items in the
      root to drop. However if we end up taking write locks due to a data
      race on disk_i_size, everything is still correct, we only add extra
      lock contention on the tree in case there's concurrency from other tasks.
      If the race causes us to not take write locks when we actually need them,
      then everything is functionally correct as well, since if we find out we
      have extent items to drop and we took read locks (modify_tree set to 0),
      we release the path and retry again with write locks.
      
      Since this data race does not affect the correctness of the function,
      it is a harmless data race, use data_race() to check inode->disk_i_size.
      
      Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarHao-ran Zheng <zhenghaoran154@gmail.com>
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c0253366
    • Kees Cook's avatar
      exec: fix up /proc/pid/comm in the execveat(AT_EMPTY_PATH) case · 5399ac3a
      Kees Cook authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit 543841d1806029889c2f69f040e88b247aba8e22 ]
      
      Zbigniew mentioned at Linux Plumber's that systemd is interested in
      switching to execveat() for service execution, but can't, because the
      contents of /proc/pid/comm are the file descriptor which was used,
      instead of the path to the binary[1]. This makes the output of tools like
      top and ps useless, especially in a world where most fds are opened
      CLOEXEC so the number is truly meaningless.
      
      When the filename passed in is empty (e.g. with AT_EMPTY_PATH), use the
      dentry's filename for "comm" instead of using the useless numeral from
      the synthetic fdpath construction. This way the actual exec machinery
      is unchanged, but cosmetically the comm looks reasonable to admins
      investigating things.
      
      Instead of adding TASK_COMM_LEN more bytes to bprm, use one of the unused
      flag bits to indicate that we need to set "comm" from the dentry.
      
      Suggested-by: default avatarZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
      Suggested-by: default avatarTycho Andersen <tandersen@netflix.com>
      Suggested-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Link: https://github.com/uapi-group/kernel-features#set-comm-field-before-exec
      
       [1]
      Reviewed-by: default avatarAleksa Sarai <cyphar@cyphar.com>
      Tested-by: default avatarZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
      Signed-off-by: default avatarKees Cook <kees@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5399ac3a
    • Filipe Manana's avatar
      btrfs: fix use-after-free when attempting to join an aborted transaction · 12d50374
      Filipe Manana authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit e2f0943cf37305dbdeaf9846e3c941451bcdef63 ]
      
      When we are trying to join the current transaction and if it's aborted,
      we read its 'aborted' field after unlocking fs_info->trans_lock and
      without holding any extra reference count on it. This means that a
      concurrent task that is aborting the transaction may free the transaction
      before we read its 'aborted' field, leading to a use-after-free.
      
      Fix this by reading the 'aborted' field while holding fs_info->trans_lock
      since any freeing task must first acquire that lock and set
      fs_info->running_transaction to NULL before freeing the transaction.
      
      This was reported by syzbot and Dmitry with the following stack traces
      from KASAN:
      
         ==================================================================
         BUG: KASAN: slab-use-after-free in join_transaction+0xd9b/0xda0 fs/btrfs/transaction.c:278
         Read of size 4 at addr ffff888011839024 by task kworker/u4:9/1128
      
         CPU: 0 UID: 0 PID: 1128 Comm: kworker/u4:9 Not tainted 6.13.0-rc7-syzkaller-00019-gc45323b7560e #0
         Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
         Workqueue: events_unbound btrfs_async_reclaim_data_space
         Call Trace:
          <TASK>
          __dump_stack lib/dump_stack.c:94 [inline]
          dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120
          print_address_description mm/kasan/report.c:378 [inline]
          print_report+0x169/0x550 mm/kasan/report.c:489
          kasan_report+0x143/0x180 mm/kasan/report.c:602
          join_transaction+0xd9b/0xda0 fs/btrfs/transaction.c:278
          start_transaction+0xaf8/0x1670 fs/btrfs/transaction.c:697
          flush_space+0x448/0xcf0 fs/btrfs/space-info.c:803
          btrfs_async_reclaim_data_space+0x159/0x510 fs/btrfs/space-info.c:1321
          process_one_work kernel/workqueue.c:3236 [inline]
          process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3317
          worker_thread+0x870/0xd30 kernel/workqueue.c:3398
          kthread+0x2f0/0x390 kernel/kthread.c:389
          ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
          ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
          </TASK>
      
         Allocated by task 5315:
          kasan_save_stack mm/kasan/common.c:47 [inline]
          kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
          poison_kmalloc_redzone mm/kasan/common.c:377 [inline]
          __kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:394
          kasan_kmalloc include/linux/kasan.h:260 [inline]
          __kmalloc_cache_noprof+0x243/0x390 mm/slub.c:4329
          kmalloc_noprof include/linux/slab.h:901 [inline]
          join_transaction+0x144/0xda0 fs/btrfs/transaction.c:308
          start_transaction+0xaf8/0x1670 fs/btrfs/transaction.c:697
          btrfs_create_common+0x1b2/0x2e0 fs/btrfs/inode.c:6572
          lookup_open fs/namei.c:3649 [inline]
          open_last_lookups fs/namei.c:3748 [inline]
          path_openat+0x1c03/0x3590 fs/namei.c:3984
          do_filp_open+0x27f/0x4e0 fs/namei.c:4014
          do_sys_openat2+0x13e/0x1d0 fs/open.c:1402
          do_sys_open fs/open.c:1417 [inline]
          __do_sys_creat fs/open.c:1495 [inline]
          __se_sys_creat fs/open.c:1489 [inline]
          __x64_sys_creat+0x123/0x170 fs/open.c:1489
          do_syscall_x64 arch/x86/entry/common.c:52 [inline]
          do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
          entry_SYSCALL_64_after_hwframe+0x77/0x7f
      
         Freed by task 5336:
          kasan_save_stack mm/kasan/common.c:47 [inline]
          kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
          kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:582
          poison_slab_object mm/kasan/common.c:247 [inline]
          __kasan_slab_free+0x59/0x70 mm/kasan/common.c:264
          kasan_slab_free include/linux/kasan.h:233 [inline]
          slab_free_hook mm/slub.c:2353 [inline]
          slab_free mm/slub.c:4613 [inline]
          kfree+0x196/0x430 mm/slub.c:4761
          cleanup_transaction fs/btrfs/transaction.c:2063 [inline]
          btrfs_commit_transaction+0x2c97/0x3720 fs/btrfs/transaction.c:2598
          insert_balance_item+0x1284/0x20b0 fs/btrfs/volumes.c:3757
          btrfs_balance+0x992/0x10c0 fs/btrfs/volumes.c:4633
          btrfs_ioctl_balance+0x493/0x7c0 fs/btrfs/ioctl.c:3670
          vfs_ioctl fs/ioctl.c:51 [inline]
          __do_sys_ioctl fs/ioctl.c:906 [inline]
          __se_sys_ioctl+0xf5/0x170 fs/ioctl.c:892
          do_syscall_x64 arch/x86/entry/common.c:52 [inline]
          do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
          entry_SYSCALL_64_after_hwframe+0x77/0x7f
      
         The buggy address belongs to the object at ffff888011839000
          which belongs to the cache kmalloc-2k of size 2048
         The buggy address is located 36 bytes inside of
          freed 2048-byte region [ffff888011839000, ffff888011839800)
      
         The buggy address belongs to the physical page:
         page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x11838
         head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
         flags: 0xfff00000000040(head|node=0|zone=1|lastcpupid=0x7ff)
         page_type: f5(slab)
         raw: 00fff00000000040 ffff88801ac42000 ffffea0000493400 dead000000000002
         raw: 0000000000000000 0000000000080008 00000001f5000000 0000000000000000
         head: 00fff00000000040 ffff88801ac42000 ffffea0000493400 dead000000000002
         head: 0000000000000000 0000000000080008 00000001f5000000 0000000000000000
         head: 00fff00000000003 ffffea0000460e01 ffffffffffffffff 0000000000000000
         head: 0000000000000008 0000000000000000 00000000ffffffff 0000000000000000
         page dumped because: kasan: bad access detected
         page_owner tracks the page as allocated
         page last allocated via order 3, migratetype Unmovable, gfp_mask 0xd20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC), pid 57, tgid 57 (kworker/0:2), ts 67248182943, free_ts 67229742023
          set_page_owner include/linux/page_owner.h:32 [inline]
          post_alloc_hook+0x1f3/0x230 mm/page_alloc.c:1558
          prep_new_page mm/page_alloc.c:1566 [inline]
          get_page_from_freelist+0x365c/0x37a0 mm/page_alloc.c:3476
          __alloc_pages_noprof+0x292/0x710 mm/page_alloc.c:4753
          alloc_pages_mpol_noprof+0x3e1/0x780 mm/mempolicy.c:2269
          alloc_slab_page+0x6a/0x110 mm/slub.c:2423
          allocate_slab+0x5a/0x2b0 mm/slub.c:2589
          new_slab mm/slub.c:2642 [inline]
          ___slab_alloc+0xc27/0x14a0 mm/slub.c:3830
          __slab_alloc+0x58/0xa0 mm/slub.c:3920
          __slab_alloc_node mm/slub.c:3995 [inline]
          slab_alloc_node mm/slub.c:4156 [inline]
          __do_kmalloc_node mm/slub.c:4297 [inline]
          __kmalloc_node_track_caller_noprof+0x2e9/0x4c0 mm/slub.c:4317
          kmalloc_reserve+0x111/0x2a0 net/core/skbuff.c:609
          __alloc_skb+0x1f3/0x440 net/core/skbuff.c:678
          alloc_skb include/linux/skbuff.h:1323 [inline]
          alloc_skb_with_frags+0xc3/0x820 net/core/skbuff.c:6612
          sock_alloc_send_pskb+0x91a/0xa60 net/core/sock.c:2884
          sock_alloc_send_skb include/net/sock.h:1803 [inline]
          mld_newpack+0x1c3/0xaf0 net/ipv6/mcast.c:1747
          add_grhead net/ipv6/mcast.c:1850 [inline]
          add_grec+0x1492/0x19a0 net/ipv6/mcast.c:1988
          mld_send_cr net/ipv6/mcast.c:2114 [inline]
          mld_ifc_work+0x691/0xd90 net/ipv6/mcast.c:2651
         page last free pid 5300 tgid 5300 stack trace:
          reset_page_owner include/linux/page_owner.h:25 [inline]
          free_pages_prepare mm/page_alloc.c:1127 [inline]
          free_unref_page+0xd3f/0x1010 mm/page_alloc.c:2659
          __slab_free+0x2c2/0x380 mm/slub.c:4524
          qlink_free mm/kasan/quarantine.c:163 [inline]
          qlist_free_all+0x9a/0x140 mm/kasan/quarantine.c:179
          kasan_quarantine_reduce+0x14f/0x170 mm/kasan/quarantine.c:286
          __kasan_slab_alloc+0x23/0x80 mm/kasan/common.c:329
          kasan_slab_alloc include/linux/kasan.h:250 [inline]
          slab_post_alloc_hook mm/slub.c:4119 [inline]
          slab_alloc_node mm/slub.c:4168 [inline]
          __do_kmalloc_node mm/slub.c:4297 [inline]
          __kmalloc_noprof+0x236/0x4c0 mm/slub.c:4310
          kmalloc_noprof include/linux/slab.h:905 [inline]
          kzalloc_noprof include/linux/slab.h:1037 [inline]
          fib_create_info+0xc14/0x25b0 net/ipv4/fib_semantics.c:1435
          fib_table_insert+0x1f6/0x1f20 net/ipv4/fib_trie.c:1231
          fib_magic+0x3d8/0x620 net/ipv4/fib_frontend.c:1112
          fib_add_ifaddr+0x40c/0x5e0 net/ipv4/fib_frontend.c:1156
          fib_netdev_event+0x375/0x490 net/ipv4/fib_frontend.c:1494
          notifier_call_chain+0x1a5/0x3f0 kernel/notifier.c:85
          __dev_notify_flags+0x207/0x400
          dev_change_flags+0xf0/0x1a0 net/core/dev.c:9045
          do_setlink+0xc90/0x4210 net/core/rtnetlink.c:3109
          rtnl_changelink net/core/rtnetlink.c:3723 [inline]
          __rtnl_newlink net/core/rtnetlink.c:3875 [inline]
          rtnl_newlink+0x1bb6/0x2210 net/core/rtnetlink.c:4012
      
         Memory state around the buggy address:
          ffff888011838f00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
          ffff888011838f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
         >ffff888011839000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                        ^
          ffff888011839080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
          ffff888011839100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
         ==================================================================
      
      Reported-by: default avatar <syzbot+45212e9d87a98c3f5b42@syzkaller.appspotmail.com>
      Link: https://lore.kernel.org/linux-btrfs/678e7da5.050a0220.303755.007c.GAE@google.com/
      
      
      Reported-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Link: https://lore.kernel.org/linux-btrfs/CACT4Y+ZFBdo7pT8L2AzM=vegZwjp-wNkVJZQf0Ta3vZqtExaSw@mail.gmail.com/
      
      
      Fixes: 871383be ("btrfs: add missing unlocks to transaction abort paths")
      Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
      Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      12d50374
    • Qu Wenruo's avatar
      btrfs: output the reason for open_ctree() failure · 30424d4f
      Qu Wenruo authored and Frieder Schrempf's avatar Frieder Schrempf committed
      commit d0f038104fa37380e2a725e669508e43d0c503e9 upstream.
      
      There is a recent ML report that mounting a large fs backed by hardware
      RAID56 controller (with one device missing) took too much time, and
      systemd seems to kill the mount attempt.
      
      In that case, the only error message is:
      
        BTRFS error (device sdj): open_ctree failed
      
      There is no reason on why the failure happened, making it very hard to
      understand the reason.
      
      At least output the error number (in the particular case it should be
      -EINTR) to provide some clue.
      
      Link: https://lore.kernel.org/linux-btrfs/9b9c4d2810abcca2f9f76e32220ed9a90febb235.camel@scientia.org/
      
      
      Reported-by: default avatarChristoph Anton Mitterer <calestyo@scientia.org>
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      30424d4f
    • Chuck Lever's avatar
      NFSD: Reset cb_seq_status after NFS4ERR_DELAY · c6a28d41
      Chuck Lever authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      commit 961b4b5e upstream.
      
      I noticed that once an NFSv4.1 callback operation gets a
      NFS4ERR_DELAY status on CB_SEQUENCE and then the connection is lost,
      the callback client loops, resending it indefinitely.
      
      The switch arm in nfsd4_cb_sequence_done() that handles
      NFS4ERR_DELAY uses rpc_restart_call() to rearm the RPC state machine
      for the retransmit, but that path does not call the rpc_prepare_call
      callback again. Thus cb_seq_status is set to -10008 by the first
      NFS4ERR_DELAY result, but is never set back to 1 for the retransmits.
      
      nfsd4_cb_sequence_done() thinks it's getting nothing but a
      long series of CB_SEQUENCE NFS4ERR_DELAY replies.
      
      Fixes: 7ba6cad6 ("nfsd: New helper nfsd4_cb_sequence_done() for processing more cb errors")
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Reviewed-by: default avatarBenjamin Coddington <bcodding@redhat.com>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c6a28d41
    • Daniel Lee's avatar
      f2fs: Introduce linear search for dentries · 72dbd732
      Daniel Lee authored and Frieder Schrempf's avatar Frieder Schrempf committed
      commit 91b587ba79e1b68bb718d12b0758dbcdab4e9cb7 upstream.
      
      This patch addresses an issue where some files in case-insensitive
      directories become inaccessible due to changes in how the kernel function,
      utf8_casefold(), generates case-folded strings from the commit 5c26d2f1
      ("unicode: Don't special case ignorable code points").
      
      F2FS uses these case-folded names to calculate hash values for locating
      dentries and stores them on disk. Since utf8_casefold() can produce
      different output across kernel versions, stored hash values and newly
      calculated hash values may differ. This results in affected files no
      longer being found via the hash-based lookup.
      
      To resolve this, the patch introduces a linear search fallback.
      If the initial hash-based search fails, F2FS will sequentially scan the
      directory entries.
      
      Fixes: 5c26d2f1 ("unicode: Don't special case ignorable code points")
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=219586
      
      
      Signed-off-by: default avatarDaniel Lee <chullee@google.com>
      Reviewed-by: default avatarChao Yu <chao@kernel.org>
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
      Cc: Daniel Rosenberg <drosen@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      72dbd732
    • pangliyuan's avatar
      ubifs: skip dumping tnc tree when zroot is null · 400159f8
      pangliyuan authored and Frieder Schrempf's avatar Frieder Schrempf committed
      [ Upstream commit bdb0ca39e0acccf6771db49c3f94ed787d05f2d7 ]
      
      Clearing slab cache will free all znode in memory and make
      c->zroot.znode = NULL, then dumping tnc tree will access
      c->zroot.znode which cause null pointer dereference.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=219624#c0
      
      
      Fixes: 1e51764a ("UBIFS: add new flash file system")
      Signed-off-by: default avatarpangliyuan <pangliyuan1@huawei.com>
      Reviewed-by: default avatarZhihao Cheng <chengzhihao1@huawei.com>
      Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      400159f8
    • Olga Kornievskaia's avatar
      NFSv4.2: mark OFFLOAD_CANCEL MOVEABLE · 78cab2e8
      Olga Kornievskaia authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit 668135b9348c53fd205f5e07d11e82b10f31b55b ]
      
      OFFLOAD_CANCEL should be marked MOVEABLE for when we need to move
      tasks off a non-functional transport.
      
      Fixes: c975c209 ("NFS send OFFLOAD_CANCEL when COPY killed")
      Signed-off-by: default avatarOlga Kornievskaia <okorniev@redhat.com>
      Signed-off-by: default avatarAnna Schumaker <anna.schumaker@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      78cab2e8
    • Olga Kornievskaia's avatar
      NFSv4.2: fix COPY_NOTIFY xdr buf size calculation · 36c79caf
      Olga Kornievskaia authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit e8380c2d06055665b3df6c03964911375d7f9290 ]
      
      We need to include sequence size in the compound.
      
      Fixes: 0491567b ("NFS: add COPY_NOTIFY operation")
      Signed-off-by: default avatarOlga Kornievskaia <okorniev@redhat.com>
      Signed-off-by: default avatarAnna Schumaker <anna.schumaker@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      36c79caf
    • Su Yue's avatar
      ocfs2: mark dquot as inactive if failed to start trans while releasing dquot · 1c865f12
      Su Yue authored and Frieder Schrempf's avatar Frieder Schrempf committed
      [ Upstream commit 276c61385f6bc3223a5ecd307cf4aba2dfbb9a31 ]
      
      While running fstests generic/329, the kernel workqueue
      quota_release_workfn is dead looping in calling ocfs2_release_dquot().
      The ocfs2 state is already readonly but ocfs2_release_dquot wants to
      start a transaction but fails and returns.
      
      =====================================================================
      [ 2918.123602 ][  T275 ] On-disk corruption discovered. Please run
      fsck.ocfs2 once the filesystem is unmounted.
      [ 2918.124034 ][  T275 ] (kworker/u135:1,275,11):ocfs2_release_dquot:765
      ERROR: status = -30
      [ 2918.124452 ][  T275 ] (kworker/u135:1,275,11):ocfs2_release_dquot:795
      ERROR: status = -30
      [ 2918.124883 ][  T275 ] (kworker/u135:1,275,11):ocfs2_start_trans:357
      ERROR: status = -30
      [ 2918.125276 ][  T275 ] OCFS2: abort (device dm-0): ocfs2_start_trans:
      Detected aborted journal
      [ 2918.125710 ][  T275 ] On-disk corruption discovered. Please run
      fsck.ocfs2 once the filesystem is unmounted.
      =====================================================================
      
      ocfs2_release_dquot() is much like dquot_release(), which is called by
      ext4 to handle similar situation.  So here fix it by marking the dquot as
      inactive like what dquot_release() does.
      
      Link: https://lkml.kernel.org/r/20250106140653.92292-1-glass.su@suse.com
      
      
      Fixes: 9e33d69f ("ocfs2: Implementation of local and global quota file handling")
      Signed-off-by: default avatarSu Yue <glass.su@suse.com>
      Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Jun Piao <piaojun@huawei.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1c865f12
    • Paulo Alcantara's avatar
      smb: client: fix oops due to unset link speed · d162d36f
      Paulo Alcantara authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit be7a6a77669588bfa5022a470989702bbbb11e7f ]
      
      It isn't guaranteed that NETWORK_INTERFACE_INFO::LinkSpeed will always
      be set by the server, so the client must handle any values and then
      prevent oopses like below from happening:
      
      Oops: divide error: 0000 [#1] PREEMPT SMP KASAN NOPTI
      CPU: 0 UID: 0 PID: 1323 Comm: cat Not tainted 6.13.0-rc7 #2
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-3.fc41
      04/01/2014
      RIP: 0010:cifs_debug_data_proc_show+0xa45/0x1460 [cifs] Code: 00 00 48
      89 df e8 3b cd 1b c1 41 f6 44 24 2c 04 0f 84 50 01 00 00 48 89 ef e8
      e7 d0 1b c1 49 8b 44 24 18 31 d2 49 8d 7c 24 28 <48> f7 74 24 18 48 89
      c3 e8 6e cf 1b c1 41 8b 6c 24 28 49 8d 7c 24
      RSP: 0018:ffffc90001817be0 EFLAGS: 00010246
      RAX: 0000000000000000 RBX: ffff88811230022c RCX: ffffffffc041bd99
      RDX: 0000000000000000 RSI: 0000000000000567 RDI: ffff888112300228
      RBP: ffff888112300218 R08: fffff52000302f5f R09: ffffed1022fa58ac
      R10: ffff888117d2c566 R11: 00000000fffffffe R12: ffff888112300200
      R13: 000000012a15343f R14: 0000000000000001 R15: ffff888113f2db58
      FS: 00007fe27119e740(0000) GS:ffff888148600000(0000)
      knlGS:0000000000000000
      CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007fe2633c5000 CR3: 0000000124da0000 CR4: 0000000000750ef0
      PKRU: 55555554
      Call Trace:
       <TASK>
       ? __die_body.cold+0x19/0x27
       ? die+0x2e/0x50
       ? do_trap+0x159/0x1b0
       ? cifs_debug_data_proc_show+0xa45/0x1460 [cifs]
       ? do_error_trap+0x90/0x130
       ? cifs_debug_data_proc_show+0xa45/0x1460 [cifs]
       ? exc_divide_error+0x39/0x50
       ? cifs_debug_data_proc_show+0xa45/0x1460 [cifs]
       ? asm_exc_divide_error+0x1a/0x20
       ? cifs_debug_data_proc_show+0xa39/0x1460 [cifs]
       ? cifs_debug_data_proc_show+0xa45/0x1460 [cifs]
       ? seq_read_iter+0x42e/0x790
       seq_read_iter+0x19a/0x790
       proc_reg_read_iter+0xbe/0x110
       ? __pfx_proc_reg_read_iter+0x10/0x10
       vfs_read+0x469/0x570
       ? do_user_addr_fault+0x398/0x760
       ? __pfx_vfs_read+0x10/0x10
       ? find_held_lock+0x8a/0xa0
       ? __pfx_lock_release+0x10/0x10
       ksys_read+0xd3/0x170
       ? __pfx_ksys_read+0x10/0x10
       ? __rcu_read_unlock+0x50/0x270
       ? mark_held_locks+0x1a/0x90
       do_syscall_64+0xbb/0x1d0
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
      RIP: 0033:0x7fe271288911
      Code: 00 48 8b 15 01 25 10 00 f7 d8 64 89 02 b8 ff ff ff ff eb bd e8
      20 ad 01 00 f3 0f 1e fa 80 3d b5 a7 10 00 00 74 13 31 c0 0f 05 <48> 3d
      00 f0 ff ff 77 4f c3 66 0f 1f 44 00 00 55 48 89 e5 48 83 ec
      RSP: 002b:00007ffe87c079d8 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
      RAX: ffffffffffffffda RBX: 0000000000040000 RCX: 00007fe271288911
      RDX: 0000000000040000 RSI: 00007fe2633c6000 RDI: 0000000000000003
      RBP: 00007ffe87c07a00 R08: 0000000000000000 R09: 00007fe2713e6380
      R10: 0000000000000022 R11: 0000000000000246 R12: 0000000000040000
      R13: 00007fe2633c6000 R14: 0000000000000003 R15: 0000000000000000
       </TASK>
      
      Fix this by setting cifs_server_iface::speed to a sane value (1Gbps)
      by default when link speed is unset.
      
      Cc: Shyam Prasad N <nspmangalore@gmail.com>
      Cc: Tom Talpey <tom@talpey.com>
      Fixes: a6d8fb54 ("cifs: distribute channels across interfaces based on speed")
      Reported-by: default avatarFrank Sorenson <sorenson@redhat.com>
      Reported-by: default avatarJay Shin <jaeshin@redhat.com>
      Signed-off-by: default avatarPaulo Alcantara (Red Hat) <pc@manguebit.com>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d162d36f
    • David Howells's avatar
      afs: Fix the fallback handling for the YFS.RemoveFile2 RPC call · 32f62f0a
      David Howells authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit e30458d690f35abb01de8b3cbc09285deb725d00 ]
      
      Fix a pair of bugs in the fallback handling for the YFS.RemoveFile2 RPC
      call:
      
       (1) Fix the abort code check to also look for RXGEN_OPCODE.  The lack of
           this masks the second bug.
      
       (2) call->server is now not used for ordinary filesystem RPC calls that
           have an operation descriptor.  Fix to use call->op->server instead.
      
      Fixes: e49c7b2f ("afs: Build an abstraction around an "operation" concept")
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Link: https://lore.kernel.org/r/109541.1736865963@warthog.procyon.org.uk
      
      
      cc: Marc Dionne <marc.dionne@auristor.com>
      cc: linux-afs@lists.infradead.org
      Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      32f62f0a
    • Christophe Leroy's avatar
      select: Fix unbalanced user_access_end() · 8238e942
      Christophe Leroy authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit 344af27715ddbf357cf76978d674428b88f8e92d ]
      
      While working on implementing user access validation on powerpc
      I got the following warnings on a pmac32_defconfig build:
      
      	  CC      fs/select.o
      	fs/select.o: warning: objtool: sys_pselect6+0x1bc: redundant UACCESS disable
      	fs/select.o: warning: objtool: sys_pselect6_time32+0x1bc: redundant UACCESS disable
      
      On powerpc/32s, user_read_access_begin/end() are no-ops, but the
      failure path has a user_access_end() instead of user_read_access_end()
      which means an access end without any prior access begin.
      
      Replace that user_access_end() by user_read_access_end().
      
      Fixes: 7e71609f ("pselect6() and friends: take handling the combined 6th/7th args into helper")
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Link: https://lore.kernel.org/r/a7139e28d767a13e667ee3c79599a8047222ef36.1736751221.git.christophe.leroy@csgroup.eu
      
      
      Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8238e942
    • Eugen Hristev's avatar
      pstore/blk: trivial typo fixes · cd1a5f88
      Eugen Hristev authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit 542243af7182efaeaf6d0f4643f7de437541a9af ]
      
      Fix trivial typos in comments.
      
      Fixes: 2a03ddbd ("pstore/blk: Move verify_size() macro out of function")
      Fixes: 17639f67 ("pstore/blk: Introduce backend for block devices")
      Signed-off-by: default avatarEugen Hristev <eugen.hristev@linaro.org>
      Link: https://lore.kernel.org/r/20250101111921.850406-1-eugen.hristev@linaro.org
      
      
      Signed-off-by: default avatarKees Cook <kees@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      cd1a5f88
    • Jinliang Zheng's avatar
      fs: fix proc_handler for sysctl_nr_open · 4069f772
      Jinliang Zheng authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit d727935cad9f6f52c8d184968f9720fdc966c669 ]
      
      Use proc_douintvec_minmax() instead of proc_dointvec_minmax() to handle
      sysctl_nr_open, because its data type is unsigned int, not int.
      
      Fixes: 9b80a184 ("fs/file: more unsigned file descriptors")
      Signed-off-by: default avatarJinliang Zheng <alexjlzheng@tencent.com>
      Link: https://lore.kernel.org/r/20241124034636.325337-1-alexjlzheng@tencent.com
      
      
      Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      4069f772
    • David Howells's avatar
      afs: Fix directory format encoding struct · edba0646
      David Howells authored and Frieder Schrempf's avatar Frieder Schrempf committed
      
      [ Upstream commit 07a10767853adcbdbf436dc91393b729b52c4e81 ]
      
      The AFS directory format structure, union afs_xdr_dir_block::meta, has too
      many alloc counter slots declared and so pushes the hash table along and
      over the data.  This doesn't cause a problem at the moment because I'm
      currently ignoring the hash table and only using the correct number of
      alloc_ctrs in the code anyway.  In future, however, I should start using
      the hash table to try and speed up afs_lookup().
      
      Fix this by using the correct constant to declare the counter array.
      
      Fixes: 4ea219a8 ("afs: Split the directory content defs into a header")
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Link: https://lore.kernel.org/r/20241216204124.3752367-14-dhowells@redhat.com
      
      
      cc: Marc Dionne <marc.dionne@auristor.com>
      cc: linux-afs@lists.infradead.org
      Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      edba0646
Loading