Skip to content
Snippets Groups Projects
  1. Jan 24, 2023
    • Jimmy Hu's avatar
      usb: xhci: Check endpoint is valid before dereferencing it · 375be2dd
      Jimmy Hu authored
      
      commit e8fb5bc7 upstream.
      
      When the host controller is not responding, all URBs queued to all
      endpoints need to be killed. This can cause a kernel panic if we
      dereference an invalid endpoint.
      
      Fix this by using xhci_get_virt_ep() helper to find the endpoint and
      checking if the endpoint is valid before dereferencing it.
      
      [233311.853271] xhci-hcd xhci-hcd.1.auto: xHCI host controller not responding, assume dead
      [233311.853393] Unable to handle kernel NULL pointer dereference at virtual address 00000000000000e8
      
      [233311.853964] pc : xhci_hc_died+0x10c/0x270
      [233311.853971] lr : xhci_hc_died+0x1ac/0x270
      
      [233311.854077] Call trace:
      [233311.854085]  xhci_hc_died+0x10c/0x270
      [233311.854093]  xhci_stop_endpoint_command_watchdog+0x100/0x1a4
      [233311.854105]  call_timer_fn+0x50/0x2d4
      [233311.854112]  expire_timers+0xac/0x2e4
      [233311.854118]  run_timer_softirq+0x300/0xabc
      [233311.854127]  __do_softirq+0x148/0x528
      [233311.854135]  irq_exit+0x194/0x1a8
      [233311.854143]  __handle_domain_irq+0x164/0x1d0
      [233311.854149]  gic_handle_irq.22273+0x10c/0x188
      [233311.854156]  el1_irq+0xfc/0x1a8
      [233311.854175]  lpm_cpuidle_enter+0x25c/0x418 [msm_pm]
      [233311.854185]  cpuidle_enter_state+0x1f0/0x764
      [233311.854194]  do_idle+0x594/0x6ac
      [233311.854201]  cpu_startup_entry+0x7c/0x80
      [233311.854209]  secondary_start_kernel+0x170/0x198
      
      Fixes: 50e8725e ("xhci: Refactor command watchdog and fix split string.")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarJimmy Hu <hhhuuu@google.com>
      Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
      Message-ID: <0fe978ed-8269-9774-1c40-f8a98c17e838@linux.intel.com>
      Link: https://lore.kernel.org/r/20230116142216.1141605-3-mathias.nyman@linux.intel.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      375be2dd
    • Ricardo Ribalda's avatar
      xhci-pci: set the dma max_seg_size · 44f4b348
      Ricardo Ribalda authored
      
      commit 93915a41 upstream.
      
      Allow devices to have dma operations beyond 64K, and avoid warnings such
      as:
      
      xhci_hcd 0000:00:14.0: mapping sg segment longer than device claims to support [len=98304] [max=65536]
      
      Cc: stable@vger.kernel.org
      Cc: Takashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarRicardo Ribalda <ribalda@chromium.org>
      Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
      Link: https://lore.kernel.org/r/20230116142216.1141605-2-mathias.nyman@linux.intel.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      44f4b348
    • Ryusuke Konishi's avatar
      nilfs2: fix general protection fault in nilfs_btree_insert() · 3c2a2ff6
      Ryusuke Konishi authored
      commit 7633355e upstream.
      
      If nilfs2 reads a corrupted disk image and tries to reads a b-tree node
      block by calling __nilfs_btree_get_block() against an invalid virtual
      block address, it returns -ENOENT because conversion of the virtual block
      address to a disk block address fails.  However, this return value is the
      same as the internal code that b-tree lookup routines return to indicate
      that the block being searched does not exist, so functions that operate on
      that b-tree may misbehave.
      
      When nilfs_btree_insert() receives this spurious 'not found' code from
      nilfs_btree_do_lookup(), it misunderstands that the 'not found' check was
      successful and continues the insert operation using incomplete lookup path
      data, causing the following crash:
      
       general protection fault, probably for non-canonical address
       0xdffffc0000000005: 0000 [#1] PREEMPT SMP KASAN
       KASAN: null-ptr-deref in range [0x0000000000000028-0x000000000000002f]
       ...
       RIP: 0010:nilfs_btree_get_nonroot_node fs/nilfs2/btree.c:418 [inline]
       RIP: 0010:nilfs_btree_prepare_insert fs/nilfs2/btree.c:1077 [inline]
       RIP: 0010:nilfs_btree_insert+0x6d3/0x1c10 fs/nilfs2/btree.c:1238
       Code: bc 24 80 00 00 00 4c 89 f8 48 c1 e8 03 42 80 3c 28 00 74 08 4c 89
       ff e8 4b 02 92 fe 4d 8b 3f 49 83 c7 28 4c 89 f8 48 c1 e8 03 <42> 80 3c
       28 00 74 08 4c 89 ff e8 2e 02 92 fe 4d 8b 3f 49 83 c7 02
       ...
       Call Trace:
       <TASK>
        nilfs_bmap_do_insert fs/nilfs2/bmap.c:121 [inline]
        nilfs_bmap_insert+0x20d/0x360 fs/nilfs2/bmap.c:147
        nilfs_get_block+0x414/0x8d0 fs/nilfs2/inode.c:101
        __block_write_begin_int+0x54c/0x1a80 fs/buffer.c:1991
        __block_write_begin fs/buffer.c:2041 [inline]
        block_write_begin+0x93/0x1e0 fs/buffer.c:2102
        nilfs_write_begin+0x9c/0x110 fs/nilfs2/inode.c:261
        generic_perform_write+0x2e4/0x5e0 mm/filemap.c:3772
        __generic_file_write_iter+0x176/0x400 mm/filemap.c:3900
        generic_file_write_iter+0xab/0x310 mm/filemap.c:3932
        call_write_iter include/linux/fs.h:2186 [inline]
        new_sync_write fs/read_write.c:491 [inline]
        vfs_write+0x7dc/0xc50 fs/read_write.c:584
        ksys_write+0x177/0x2a0 fs/read_write.c:637
        do_syscall_x64 arch/x86/entry/common.c:50 [inline]
        do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80
        entry_SYSCALL_64_after_hwframe+0x63/0xcd
       ...
       </TASK>
      
      This patch fixes the root cause of this problem by replacing the error
      code that __nilfs_btree_get_block() returns on block address conversion
      failure from -ENOENT to another internal code -EINVAL which means that the
      b-tree metadata is corrupted.
      
      By returning -EINVAL, it propagates without glitches, and for all relevant
      b-tree operations, functions in the upper bmap layer output an error
      message indicating corrupted b-tree metadata via
      nilfs_bmap_convert_error(), and code -EIO will be eventually returned as
      it should be.
      
      Link: https://lkml.kernel.org/r/000000000000bd89e205f0e38355@google.com
      Link: https://lkml.kernel.org/r/20230105055356.8811-1-konishi.ryusuke@gmail.com
      
      
      Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
      Reported-by: default avatar <syzbot+ede796cecd5296353515@syzkaller.appspotmail.com>
      Tested-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>
      3c2a2ff6
    • Jaegeuk Kim's avatar
      f2fs: let's avoid panic if extent_tree is not created · dd83a976
      Jaegeuk Kim authored
      
      [ Upstream commit df9d44b6 ]
      
      This patch avoids the below panic.
      
      pc : __lookup_extent_tree+0xd8/0x760
      lr : f2fs_do_write_data_page+0x104/0x87c
      sp : ffffffc010cbb3c0
      x29: ffffffc010cbb3e0 x28: 0000000000000000
      x27: ffffff8803e7f020 x26: ffffff8803e7ed40
      x25: ffffff8803e7f020 x24: ffffffc010cbb460
      x23: ffffffc010cbb480 x22: 0000000000000000
      x21: 0000000000000000 x20: ffffffff22e90900
      x19: 0000000000000000 x18: ffffffc010c5d080
      x17: 0000000000000000 x16: 0000000000000020
      x15: ffffffdb1acdbb88 x14: ffffff888759e2b0
      x13: 0000000000000000 x12: ffffff802da49000
      x11: 000000000a001200 x10: ffffff8803e7ed40
      x9 : ffffff8023195800 x8 : ffffff802da49078
      x7 : 0000000000000001 x6 : 0000000000000000
      x5 : 0000000000000006 x4 : ffffffc010cbba28
      x3 : 0000000000000000 x2 : ffffffc010cbb480
      x1 : 0000000000000000 x0 : ffffff8803e7ed40
      Call trace:
       __lookup_extent_tree+0xd8/0x760
       f2fs_do_write_data_page+0x104/0x87c
       f2fs_write_single_data_page+0x420/0xb60
       f2fs_write_cache_pages+0x418/0xb1c
       __f2fs_write_data_pages+0x428/0x58c
       f2fs_write_data_pages+0x30/0x40
       do_writepages+0x88/0x190
       __writeback_single_inode+0x48/0x448
       writeback_sb_inodes+0x468/0x9e8
       __writeback_inodes_wb+0xb8/0x2a4
       wb_writeback+0x33c/0x740
       wb_do_writeback+0x2b4/0x400
       wb_workfn+0xe4/0x34c
       process_one_work+0x24c/0x5bc
       worker_thread+0x3e8/0xa50
       kthread+0x150/0x1b4
      
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      dd83a976
    • Jiri Slaby (SUSE)'s avatar
      RDMA/srp: Move large values to a new enum for gcc13 · bf9db115
      Jiri Slaby (SUSE) authored
      [ Upstream commit 56c5dab2 ]
      
      Since gcc13, each member of an enum has the same type as the enum [1]. And
      that is inherited from its members. Provided these two:
        SRP_TAG_NO_REQ        = ~0U,
        SRP_TAG_TSK_MGMT	= 1U << 31
      all other members are unsigned ints.
      
      Esp. with SRP_MAX_SGE and SRP_TSK_MGMT_SQ_SIZE and their use in min(),
      this results in the following warnings:
        include/linux/minmax.h:20:35: error: comparison of distinct pointer types lacks a cast
        drivers/infiniband/ulp/srp/ib_srp.c:563:42: note: in expansion of macro 'min'
      
        include/linux/minmax.h:20:35: error: comparison of distinct pointer types lacks a cast
        drivers/infiniband/ulp/srp/ib_srp.c:2369:27: note: in expansion of macro 'min'
      
      So move the large values away to a separate enum, so that they don't
      affect other members.
      
      [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=36113
      
      Link: https://lore.kernel.org/r/20221212120411.13750-1-jirislaby@kernel.org
      
      
      Signed-off-by: default avatarJiri Slaby (SUSE) <jirislaby@kernel.org>
      Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bf9db115
    • Daniil Tatianin's avatar
      net/ethtool/ioctl: return -EOPNOTSUPP if we have no phy stats · 5d71531e
      Daniil Tatianin authored
      
      [ Upstream commit 9deb1e9f ]
      
      It's not very useful to copy back an empty ethtool_stats struct and
      return 0 if we didn't actually have any stats. This also allows for
      further simplification of this function in the future commits.
      
      Signed-off-by: default avatarDaniil Tatianin <d-tatianin@yandex-team.ru>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5d71531e
    • Olga Kornievskaia's avatar
      pNFS/filelayout: Fix coalescing test for single DS · 9bf15159
      Olga Kornievskaia authored
      
      [ Upstream commit a6b9d2fa ]
      
      When there is a single DS no striping constraints need to be placed on
      the IO. When such constraint is applied then buffered reads don't
      coalesce to the DS's rsize.
      
      Signed-off-by: default avatarOlga Kornievskaia <kolga@netapp.com>
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9bf15159
  2. Jan 18, 2023
Loading