1. 06 Mar, 2022 1 commit
    • Anirudh Rayabharam's avatar
      vhost: fix hung thread due to erroneous iotlb entries · e2ae38cf
      Anirudh Rayabharam authored
      In vhost_iotlb_add_range_ctx(), range size can overflow to 0 when
      start is 0 and last is ULONG_MAX. One instance where it can happen
      is when userspace sends an IOTLB message with iova=size=uaddr=0
      (vhost_process_iotlb_msg). So, an entry with size = 0, start = 0,
      last = ULONG_MAX ends up in the iotlb. Next time a packet is sent,
      iotlb_access_ok() loops indefinitely due to that erroneous entry.
      
      	Call Trace:
      	 <TASK>
      	 iotlb_access_ok+0x21b/0x3e0 drivers/vhost/vhost.c:1340
      	 vq_meta_prefetch+0xbc/0x280 drivers/vhost/vhost.c:1366
      	 vhost_transport_do_send_pkt+0xe0/0xfd0 drivers/vhost/vsock.c:104
      	 vhost_worker+0x23d/0x3d0 drivers/vhost/vhost.c:372
      	 kthread+0x2e9/0x3a0 kernel/kthread.c:377
      	 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295
      	 </TASK>
      
      Reported by syzbot at:
      	https://syzkaller.appspot.com/bug?extid=0abd373e2e50d704db87
      
      To fix this, do two things:
      
      1. Return -EINVAL in vhost_chr_write_iter() when userspace asks to map
         a range with size 0.
      2. Fix vhost_iotlb_add_range_ctx() to handle the range [0, ULONG_MAX]
         by splitting it into two entries.
      
      Fixes: 0bbe3066 ("vhost: factor out IOTLB")
      Reported-by: syzbot+0abd373e2e50d704db87@syzkaller.appspotmail.com
      Tested-by: syzbot+0abd373e2e50d704db87@syzkaller.appspotmail.com
      Signed-off-by: default avatarAnirudh Rayabharam <mail@anirudhrb.com>
      Link: https://lore.kernel.org/r/20220305095525.5145-1-mail@anirudhrb.comSigned-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      e2ae38cf
  2. 04 Mar, 2022 8 commits
  3. 27 Feb, 2022 4 commits
  4. 26 Feb, 2022 22 commits
  5. 25 Feb, 2022 5 commits
    • Linus Torvalds's avatar
      Merge tag 'configfs-5.17-2022-02-25' of git://git.infradead.org/users/hch/configfs · 9137eda5
      Linus Torvalds authored
      Pull configfs fix from Christoph Hellwig:
      
       - fix a race in configfs_{,un}register_subsystem (ChenXiaoSong)
      
      * tag 'configfs-5.17-2022-02-25' of git://git.infradead.org/users/hch/configfs:
        configfs: fix a race in configfs_{,un}register_subsystem()
      9137eda5
    • Linus Torvalds's avatar
      Merge tag 'for-5.17-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux · c0419188
      Linus Torvalds authored
      Pull btrfs fixes from David Sterba:
       "This is a hopefully last batch of fixes for defrag that got broken in
        5.16, all stable material.
      
        The remaining reported problem is excessive IO with autodefrag due to
        various conditions in the defrag code not met or missing"
      
      * tag 'for-5.17-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux:
        btrfs: reduce extent threshold for autodefrag
        btrfs: autodefrag: only scan one inode once
        btrfs: defrag: don't use merged extent map for their generation check
        btrfs: defrag: bring back the old file extent search behavior
        btrfs: defrag: remove an ambiguous condition for rejection
        btrfs: defrag: don't defrag extents which are already at max capacity
        btrfs: defrag: don't try to merge regular extents with preallocated extents
        btrfs: defrag: allow defrag_one_cluster() to skip large extent which is not a target
        btrfs: prevent copying too big compressed lzo segment
      c0419188
    • Linus Torvalds's avatar
      Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma · ca745723
      Linus Torvalds authored
      Pull rdma fixes from Jason Gunthorpe:
      
       - Older "does not even boot" regression in qib from July
      
       - Bug fixes for error unwind in rtrs
      
       - Avoid a deadlock syzkaller found in srp
      
       - Fix another UAF syzkaller found in cma
      
      * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma:
        RDMA/cma: Do not change route.addr.src_addr outside state checks
        RDMA/ib_srp: Fix a deadlock
        RDMA/rtrs-clt: Move free_permit from free_clt to rtrs_clt_close
        RDMA/rtrs-clt: Fix possible double free in error case
        IB/qib: Fix duplicate sysfs directory name
      ca745723
    • Linus Torvalds's avatar
      Merge tag 'gpio-fixes-for-v5.17-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux · 115ccd22
      Linus Torvalds authored
      Pull gpio fixes from Bartosz Golaszewski:
      
       - fix an bug generating spurious interrupts in gpio-rockchip
      
       - fix a race condition in gpiod_to_irq() called by GPIO consumers
      
      * tag 'gpio-fixes-for-v5.17-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux:
        gpio: Return EPROBE_DEFER if gc->to_irq is NULL
        gpio: rockchip: Reset int_bothedge when changing trigger
      115ccd22
    • Jason Gunthorpe's avatar
      RDMA/cma: Do not change route.addr.src_addr outside state checks · 22e9f710
      Jason Gunthorpe authored
      If the state is not idle then resolve_prepare_src() should immediately
      fail and no change to global state should happen. However, it
      unconditionally overwrites the src_addr trying to build a temporary any
      address.
      
      For instance if the state is already RDMA_CM_LISTEN then this will corrupt
      the src_addr and would cause the test in cma_cancel_operation():
      
                 if (cma_any_addr(cma_src_addr(id_priv)) && !id_priv->cma_dev)
      
      Which would manifest as this trace from syzkaller:
      
        BUG: KASAN: use-after-free in __list_add_valid+0x93/0xa0 lib/list_debug.c:26
        Read of size 8 at addr ffff8881546491e0 by task syz-executor.1/32204
      
        CPU: 1 PID: 32204 Comm: syz-executor.1 Not tainted 5.12.0-rc8-syzkaller #0
        Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
        Call Trace:
         __dump_stack lib/dump_stack.c:79 [inline]
         dump_stack+0x141/0x1d7 lib/dump_stack.c:120
         print_address_description.constprop.0.cold+0x5b/0x2f8 mm/kasan/report.c:232
         __kasan_report mm/kasan/report.c:399 [inline]
         kasan_report.cold+0x7c/0xd8 mm/kasan/report.c:416
         __list_add_valid+0x93/0xa0 lib/list_debug.c:26
         __list_add include/linux/list.h:67 [inline]
         list_add_tail include/linux/list.h:100 [inline]
         cma_listen_on_all drivers/infiniband/core/cma.c:2557 [inline]
         rdma_listen+0x787/0xe00 drivers/infiniband/core/cma.c:3751
         ucma_listen+0x16a/0x210 drivers/infiniband/core/ucma.c:1102
         ucma_write+0x259/0x350 drivers/infiniband/core/ucma.c:1732
         vfs_write+0x28e/0xa30 fs/read_write.c:603
         ksys_write+0x1ee/0x250 fs/read_write.c:658
         do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
         entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      This is indicating that an rdma_id_private was destroyed without doing
      cma_cancel_listens().
      
      Instead of trying to re-use the src_addr memory to indirectly create an
      any address derived from the dst build one explicitly on the stack and
      bind to that as any other normal flow would do. rdma_bind_addr() will copy
      it over the src_addr once it knows the state is valid.
      
      This is similar to commit bc0bdc5a ("RDMA/cma: Do not change
      route.addr.src_addr.ss_family")
      
      Link: https://lore.kernel.org/r/0-v2-e975c8fd9ef2+11e-syz_cma_srcaddr_jgg@nvidia.com
      Cc: stable@vger.kernel.org
      Fixes: 732d41c5 ("RDMA/cma: Make the locking for automatic state transition more clear")
      Reported-by: syzbot+c94a3675a626f6333d74@syzkaller.appspotmail.com
      Reviewed-by: default avatarLeon Romanovsky <leonro@nvidia.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      22e9f710