Skip to content
  1. Jun 05, 2023
    • Geliang Tang's avatar
      mptcp: only send RM_ADDR in nl_cmd_remove · 8b1c94da
      Geliang Tang authored
      The specifications from [1] about the "REMOVE" command say:
      
          Announce that an address has been lost to the peer
      
      It was then only supposed to send a RM_ADDR and not trying to delete
      associated subflows.
      
      A new helper mptcp_pm_remove_addrs() is then introduced to do just
      that, compared to mptcp_pm_remove_addrs_and_subflows() also removing
      subflows.
      
      To delete a subflow, the userspace daemon can use the "SUB_DESTROY"
      command, see mptcp_nl_cmd_sf_destroy().
      
      Fixes: d9a4594e ("mptcp: netlink: Add MPTCP_PM_CMD_REMOVE")
      Link: https://github.com/multipath-tcp/mptcp/blob/mptcp_v0.96/include/uapi/linux/mptcp.h
      
       [1]
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
      Signed-off-by: default avatarGeliang Tang <geliang.tang@suse.com>
      Signed-off-by: default avatarMat Martineau <martineau@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8b1c94da
    • Bartosz Golaszewski's avatar
      net: stmmac: dwmac-qcom-ethqos: fix a regression on EMAC < 3 · 9bc00973
      Bartosz Golaszewski authored
      We must not assign plat_dat->dwmac4_addrs unconditionally as for
      structures which don't set them, this will result in the core driver
      using zeroes everywhere and breaking the driver for older HW. On EMAC < 2
      the address should remain NULL.
      
      Fixes: b6837619
      
       ("net: stmmac: dwmac-qcom-ethqos: Add EMAC3 support")
      Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
      Reviewed-by: default avatarAndrew Halaney <ahalaney@redhat.com>
      Reviewed-by: default avatarSiddharth Vadapalli <s-vadapalli@ti.com>
      Reviewed-by: default avatarVinod Koul <vkoul@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9bc00973
    • David S. Miller's avatar
      Merge tag 'linux-can-fixes-for-6.4-20230605' of... · d7536931
      David S. Miller authored
      Merge tag 'linux-can-fixes-for-6.4-20230605' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can
      
      
      
      Marc Kleine-Budde says:
      
      ====================
      
      this is a pull request of 3 patches for net/master.
      
      All 3 patches target the j1939 stack.
      
      The 1st patch is by Oleksij Rempel and fixes the error queue handling
      for (E)TP sessions that run into timeouts.
      
      The last 2 patches are by Fedor Pchelkin and fix a potential
      use-after-free in j1939_netdev_start() if j1939_can_rx_register()
      fails.
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d7536931
    • Eric Dumazet's avatar
      net/sched: fq_pie: ensure reasonable TCA_FQ_PIE_QUANTUM values · cd2b8113
      Eric Dumazet authored
      We got multiple syzbot reports, all duplicates of the following [1]
      
      syzbot managed to install fq_pie with a zero TCA_FQ_PIE_QUANTUM,
      thus triggering infinite loops.
      
      Use limits similar to sch_fq, with commits
      3725a269 ("pkt_sched: fq: avoid hang when quantum 0") and
      d9e15a27 ("pkt_sched: fq: do not accept silly TCA_FQ_QUANTUM")
      
      [1]
      watchdog: BUG: soft lockup - CPU#0 stuck for 26s! [swapper/0:0]
      Modules linked in:
      irq event stamp: 172817
      hardirqs last enabled at (172816): [<ffff80001242fde4>] __el1_irq arch/arm64/kernel/entry-common.c:476 [inline]
      hardirqs last enabled at (172816): [<ffff80001242fde4>] el1_interrupt+0x58/0x68 arch/arm64/kernel/entry-common.c:486
      hardirqs last disabled at (172817): [<ffff80001242fdb0>] __el1_irq arch/arm64/kernel/entry-common.c:468 [inline]
      hardirqs last disabled at (172817): [<ffff80001242fdb0>] el1_interrupt+0x24/0x68 arch/arm64/kernel/entry-common.c:486
      softirqs last enabled at (167634): [<ffff800008020c1c>] softirq_handle_end kernel/softirq.c:414 [inline]
      softirqs last enabled at (167634): [<ffff800008020c1c>] __do_softirq+0xac0/0xd54 kernel/softirq.c:600
      softirqs last disabled at (167701): [<ffff80000802a660>] ____do_softirq+0x14/0x20 arch/arm64/kernel/irq.c:80
      CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.4.0-rc3-syzkaller-geb0f1697d729 #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/28/2023
      pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : fq_pie_qdisc_dequeue+0x10c/0x8ac net/sched/sch_fq_pie.c:246
      lr : fq_pie_qdisc_dequeue+0xe4/0x8ac net/sched/sch_fq_pie.c:240
      sp : ffff800008007210
      x29: ffff800008007280 x28: ffff0000c86f7890 x27: ffff0000cb20c2e8
      x26: ffff0000cb20c2f0 x25: dfff800000000000 x24: ffff0000cb20c2e0
      x23: ffff0000c86f7880 x22: 0000000000000040 x21: 1fffe000190def10
      x20: ffff0000cb20c2e0 x19: ffff0000cb20c2e0 x18: ffff800008006e60
      x17: 0000000000000000 x16: ffff80000850af6c x15: 0000000000000302
      x14: 0000000000000100 x13: 0000000000000000 x12: 0000000000000001
      x11: 0000000000000302 x10: 0000000000000100 x9 : 0000000000000000
      x8 : 0000000000000000 x7 : ffff80000841c468 x6 : 0000000000000000
      x5 : 0000000000000001 x4 : 0000000000000001 x3 : 0000000000000000
      x2 : ffff0000cb20c2e0 x1 : ffff0000cb20c2e0 x0 : 0000000000000001
      Call trace:
      fq_pie_qdisc_dequeue+0x10c/0x8ac net/sched/sch_fq_pie.c:246
      dequeue_skb net/sched/sch_generic.c:292 [inline]
      qdisc_restart net/sched/sch_generic.c:397 [inline]
      __qdisc_run+0x1fc/0x231c net/sched/sch_generic.c:415
      __dev_xmit_skb net/core/dev.c:3868 [inline]
      __dev_queue_xmit+0xc80/0x3318 net/core/dev.c:4210
      dev_queue_xmit include/linux/netdevice.h:3085 [inline]
      neigh_connected_output+0x2f8/0x38c net/core/neighbour.c:1581
      neigh_output include/net/neighbour.h:544 [inline]
      ip6_finish_output2+0xd60/0x1a1c net/ipv6/ip6_output.c:134
      __ip6_finish_output net/ipv6/ip6_output.c:195 [inline]
      ip6_finish_output+0x538/0x8c8 net/ipv6/ip6_output.c:206
      NF_HOOK_COND include/linux/netfilter.h:292 [inline]
      ip6_output+0x270/0x594 net/ipv6/ip6_output.c:227
      dst_output include/net/dst.h:458 [inline]
      NF_HOOK include/linux/netfilter.h:303 [inline]
      ndisc_send_skb+0xc30/0x1790 net/ipv6/ndisc.c:508
      ndisc_send_rs+0x47c/0x5d4 net/ipv6/ndisc.c:718
      addrconf_rs_timer+0x300/0x58c net/ipv6/addrconf.c:3936
      call_timer_fn+0x19c/0x8cc kernel/time/timer.c:1700
      expire_timers kernel/time/timer.c:1751 [inline]
      __run_timers+0x55c/0x734 kernel/time/timer.c:2022
      run_timer_softirq+0x7c/0x114 kernel/time/timer.c:2035
      __do_softirq+0x2d0/0xd54 kernel/softirq.c:571
      ____do_softirq+0x14/0x20 arch/arm64/kernel/irq.c:80
      call_on_irq_stack+0x24/0x4c arch/arm64/kernel/entry.S:882
      do_softirq_own_stack+0x20/0x2c arch/arm64/kernel/irq.c:85
      invoke_softirq kernel/softirq.c:452 [inline]
      __irq_exit_rcu+0x28c/0x534 kernel/softirq.c:650
      irq_exit_rcu+0x14/0x84 kernel/softirq.c:662
      __el1_irq arch/arm64/kernel/entry-common.c:472 [inline]
      el1_interrupt+0x38/0x68 arch/arm64/kernel/entry-common.c:486
      el1h_64_irq_handler+0x18/0x24 arch/arm64/kernel/entry-common.c:491
      el1h_64_irq+0x64/0x68 arch/arm64/kernel/entry.S:587
      __daif_local_irq_enable arch/arm64/include/asm/irqflags.h:33 [inline]
      arch_local_irq_enable+0x8/0xc arch/arm64/include/asm/irqflags.h:55
      cpuidle_idle_call kernel/sched/idle.c:170 [inline]
      do_idle+0x1f0/0x4e8 kernel/sched/idle.c:282
      cpu_startup_entry+0x24/0x28 kernel/sched/idle.c:379
      rest_init+0x2dc/0x2f4 init/main.c:735
      start_kernel+0x0/0x55c init/main.c:834
      start_kernel+0x3f0/0x55c init/main.c:1088
      __primary_switched+0xb8/0xc0 arch/arm64/kernel/head.S:523
      
      Fixes: ec97ecf1
      
       ("net: sched: add Flow Queue PIE packet scheduler")
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reviewed-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      cd2b8113
    • Marc Kleine-Budde's avatar
      Merge patch series "can: j1939: avoid possible use-after-free when j1939_can_rx_register fails" · 628f725d
      Marc Kleine-Budde authored
      Fedor Pchelkin <pchelkin@ispras.ru> says:
      
      The patch series fixes a possible racy use-after-free scenario
      described in 2/2: if j1939_can_rx_register() fails then the concurrent
      thread may have already read the invalid priv structure.
      
      The 1/2 makes j1939_netdev_lock a mutex so that access to
      j1939_can_rx_register() can be serialized without changing GFP_KERNEL
      to GFP_ATOMIC inside can_rx_register(). This seems to be safe.
      
      Note that the patch series has been tested only via Syzkaller and not
      with a real device.
      
      Link: https://lore.kernel.org/r/20230526171910.227615-1-pchelkin@ispras.ru
      
      
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      628f725d
    • Fedor Pchelkin's avatar
      can: j1939: avoid possible use-after-free when j1939_can_rx_register fails · 9f16eb10
      Fedor Pchelkin authored
      Syzkaller reports the following failure:
      
      BUG: KASAN: use-after-free in kref_put include/linux/kref.h:64 [inline]
      BUG: KASAN: use-after-free in j1939_priv_put+0x25/0xa0 net/can/j1939/main.c:172
      Write of size 4 at addr ffff888141c15058 by task swapper/3/0
      
      CPU: 3 PID: 0 Comm: swapper/3 Not tainted 5.10.144-syzkaller #0
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
      Call Trace:
       <IRQ>
       __dump_stack lib/dump_stack.c:77 [inline]
       dump_stack+0x107/0x167 lib/dump_stack.c:118
       print_address_description.constprop.0+0x1c/0x220 mm/kasan/report.c:385
       __kasan_report mm/kasan/report.c:545 [inline]
       kasan_report.cold+0x1f/0x37 mm/kasan/report.c:562
       check_memory_region_inline mm/kasan/generic.c:186 [inline]
       check_memory_region+0x145/0x190 mm/kasan/generic.c:192
       instrument_atomic_read_write include/linux/instrumented.h:101 [inline]
       atomic_fetch_sub_release include/asm-generic/atomic-instrumented.h:220 [inline]
       __refcount_sub_and_test include/linux/refcount.h:272 [inline]
       __refcount_dec_and_test include/linux/refcount.h:315 [inline]
       refcount_dec_and_test include/linux/refcount.h:333 [inline]
       kref_put include/linux/kref.h:64 [inline]
       j1939_priv_put+0x25/0xa0 net/can/j1939/main.c:172
       j1939_sk_sock_destruct+0x44/0x90 net/can/j1939/socket.c:374
       __sk_destruct+0x4e/0x820 net/core/sock.c:1784
       rcu_do_batch kernel/rcu/tree.c:2485 [inline]
       rcu_core+0xb35/0x1a30 kernel/rcu/tree.c:2726
       __do_softirq+0x289/0x9a3 kernel/softirq.c:298
       asm_call_irq_on_stack+0x12/0x20
       </IRQ>
       __run_on_irqstack arch/x86/include/asm/irq_stack.h:26 [inline]
       run_on_irqstack_cond arch/x86/include/asm/irq_stack.h:77 [inline]
       do_softirq_own_stack+0xaa/0xe0 arch/x86/kernel/irq_64.c:77
       invoke_softirq kernel/softirq.c:393 [inline]
       __irq_exit_rcu kernel/softirq.c:423 [inline]
       irq_exit_rcu+0x136/0x200 kernel/softirq.c:435
       sysvec_apic_timer_interrupt+0x4d/0x100 arch/x86/kernel/apic/apic.c:1095
       asm_sysvec_apic_timer_interrupt+0x12/0x20 arch/x86/include/asm/idtentry.h:635
      
      Allocated by task 1141:
       kasan_save_stack+0x1b/0x40 mm/kasan/common.c:48
       kasan_set_track mm/kasan/common.c:56 [inline]
       __kasan_kmalloc.constprop.0+0xc9/0xd0 mm/kasan/common.c:461
       kmalloc include/linux/slab.h:552 [inline]
       kzalloc include/linux/slab.h:664 [inline]
       j1939_priv_create net/can/j1939/main.c:131 [inline]
       j1939_netdev_start+0x111/0x860 net/can/j1939/main.c:268
       j1939_sk_bind+0x8ea/0xd30 net/can/j1939/socket.c:485
       __sys_bind+0x1f2/0x260 net/socket.c:1645
       __do_sys_bind net/socket.c:1656 [inline]
       __se_sys_bind net/socket.c:1654 [inline]
       __x64_sys_bind+0x6f/0xb0 net/socket.c:1654
       do_syscall_64+0x33/0x40 arch/x86/entry/common.c:46
       entry_SYSCALL_64_after_hwframe+0x61/0xc6
      
      Freed by task 1141:
       kasan_save_stack+0x1b/0x40 mm/kasan/common.c:48
       kasan_set_track+0x1c/0x30 mm/kasan/common.c:56
       kasan_set_free_info+0x1b/0x30 mm/kasan/generic.c:355
       __kasan_slab_free+0x112/0x170 mm/kasan/common.c:422
       slab_free_hook mm/slub.c:1542 [inline]
       slab_free_freelist_hook+0xad/0x190 mm/slub.c:1576
       slab_free mm/slub.c:3149 [inline]
       kfree+0xd9/0x3b0 mm/slub.c:4125
       j1939_netdev_start+0x5ee/0x860 net/can/j1939/main.c:300
       j1939_sk_bind+0x8ea/0xd30 net/can/j1939/socket.c:485
       __sys_bind+0x1f2/0x260 net/socket.c:1645
       __do_sys_bind net/socket.c:1656 [inline]
       __se_sys_bind net/socket.c:1654 [inline]
       __x64_sys_bind+0x6f/0xb0 net/socket.c:1654
       do_syscall_64+0x33/0x40 arch/x86/entry/common.c:46
       entry_SYSCALL_64_after_hwframe+0x61/0xc6
      
      It can be caused by this scenario:
      
      CPU0					CPU1
      j1939_sk_bind(socket0, ndev0, ...)
        j1939_netdev_start()
      					j1939_sk_bind(socket1, ndev0, ...)
                                                j1939_netdev_start()
        mutex_lock(&j1939_netdev_lock)
        j1939_priv_set(ndev0, priv)
        mutex_unlock(&j1939_netdev_lock)
      					  if (priv_new)
      					    kref_get(&priv_new->rx_kref)
      					    return priv_new;
      					  /* inside j1939_sk_bind() */
      					  jsk->priv = priv
        j1939_can_rx_register(priv) // fails
        j1939_priv_set(ndev, NULL)
        kfree(priv)
      					j1939_sk_sock_destruct()
      					j1939_priv_put() // <- uaf
      
      To avoid this, call j1939_can_rx_register() under j1939_netdev_lock so
      that a concurrent thread cannot process j1939_priv before
      j1939_can_rx_register() returns.
      
      Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
      
      Fixes: 9d71dd0c
      
       ("can: add support of SAE J1939 protocol")
      Signed-off-by: default avatarFedor Pchelkin <pchelkin@ispras.ru>
      Tested-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
      Acked-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
      Link: https://lore.kernel.org/r/20230526171910.227615-3-pchelkin@ispras.ru
      
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      9f16eb10
    • Fedor Pchelkin's avatar
      can: j1939: change j1939_netdev_lock type to mutex · cd9c790d
      Fedor Pchelkin authored
      It turns out access to j1939_can_rx_register() needs to be serialized,
      otherwise j1939_priv can be corrupted when parallel threads call
      j1939_netdev_start() and j1939_can_rx_register() fails. This issue is
      thoroughly covered in other commit which serializes access to
      j1939_can_rx_register().
      
      Change j1939_netdev_lock type to mutex so that we do not need to remove
      GFP_KERNEL from can_rx_register().
      
      j1939_netdev_lock seems to be used in normal contexts where mutex usage
      is not prohibited.
      
      Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
      
      Fixes: 9d71dd0c
      
       ("can: add support of SAE J1939 protocol")
      Suggested-by: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
      Signed-off-by: default avatarFedor Pchelkin <pchelkin@ispras.ru>
      Tested-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
      Acked-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
      Link: https://lore.kernel.org/r/20230526171910.227615-2-pchelkin@ispras.ru
      
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      cd9c790d
    • Oleksij Rempel's avatar
      can: j1939: j1939_sk_send_loop_abort(): improved error queue handling in J1939 Socket · 2a84aea8
      Oleksij Rempel authored
      This patch addresses an issue within the j1939_sk_send_loop_abort()
      function in the j1939/socket.c file, specifically in the context of
      Transport Protocol (TP) sessions.
      
      Without this patch, when a TP session is initiated and a Clear To Send
      (CTS) frame is received from the remote side requesting one data packet,
      the kernel dispatches the first Data Transport (DT) frame and then waits
      for the next CTS. If the remote side doesn't respond with another CTS,
      the kernel aborts due to a timeout. This leads to the user-space
      receiving an EPOLLERR on the socket, and the socket becomes active.
      
      However, when trying to read the error queue from the socket with
      sock.recvmsg(, , socket.MSG_ERRQUEUE), it returns -EAGAIN,
      given that the socket is non-blocking. This situation results in an
      infinite loop: the user-space repeatedly calls epoll(), epoll() returns
      the socket file descriptor with EPOLLERR, but the socket then blocks on
      the recv() of ERRQUEUE.
      
      This patch introduces an additional check for the J1939_SOCK_ERRQUEUE
      flag within the j1939_sk_send_loop_abort() function. If the flag is set,
      it indicates that the application has subscribed to receive error queue
      messages. In such cases, the kernel can communicate the current transfer
      state via the error queue. This allows for the function to return early,
      preventing the unnecessary setting of the socket into an error state,
      and breaking the infinite loop. It is crucial to note that a socket
      error is only needed if the application isn't using the error queue, as,
      without it, the application wouldn't be aware of transfer issues.
      
      Fixes: 9d71dd0c
      
       ("can: add support of SAE J1939 protocol")
      Reported-by: default avatarDavid Jander <david@protonic.nl>
      Tested-by: default avatarDavid Jander <david@protonic.nl>
      Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
      Link: https://lore.kernel.org/r/20230526081946.715190-1-o.rempel@pengutronix.de
      
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      2a84aea8
  2. Jun 04, 2023
    • Min-Hua Chen's avatar
      net: sched: wrap tc_skip_wrapper with CONFIG_RETPOLINE · 8cde87b0
      Min-Hua Chen authored
      
      
      This patch fixes the following sparse warning:
      
      net/sched/sch_api.c:2305:1: sparse: warning: symbol 'tc_skip_wrapper' was not declared. Should it be static?
      
      No functional change intended.
      
      Signed-off-by: default avatarMin-Hua Chen <minhuadotchen@gmail.com>
      Acked-by: default avatarPedro Tammela <pctammela@mojatatu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8cde87b0
    • David S. Miller's avatar
      Merge branch 'enetc-fixes' · 3d5f4d29
      David S. Miller authored
      
      
      Wei Fang says:
      
      ====================
      net: enetc: correct the statistics of rx bytes
      
      The purpose of this patch set is to fix the issue of rx bytes
      statistics. The first patch corrects the rx bytes statistics
      of normal kernel protocol stack path, and the second patch is
      used to correct the rx bytes statistics of XDP.
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3d5f4d29
    • Wei Fang's avatar
      net: enetc: correct rx_bytes statistics of XDP · fdebd850
      Wei Fang authored
      The rx_bytes statistics of XDP are always zero, because rx_byte_cnt
      is not updated after it is initialized to 0. So fix it.
      
      Fixes: d1b15102
      
       ("net: enetc: add support for XDP_DROP and XDP_PASS")
      Signed-off-by: default avatarWei Fang <wei.fang@nxp.com>
      Reviewed-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fdebd850
    • Wei Fang's avatar
      net: enetc: correct the statistics of rx bytes · 7190d0ff
      Wei Fang authored
      The rx_bytes of struct net_device_stats should count the length of
      ethernet frames excluding the FCS. However, there are two problems
      with the rx_bytes statistics of the current enetc driver. one is
      that the length of VLAN header is not counted if the VLAN extraction
      feature is enabled. The other is that the length of L2 header is not
      counted, because eth_type_trans() is invoked before updating rx_bytes
      which will subtract the length of L2 header from skb->len.
      BTW, the rx_bytes statistics of XDP path also have similar problem,
      I will fix it in another patch.
      
      Fixes: a800abd3
      
       ("net: enetc: move skb creation into enetc_build_skb")
      Signed-off-by: default avatarWei Fang <wei.fang@nxp.com>
      Reviewed-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7190d0ff
    • Wen Gu's avatar
      net/smc: Avoid to access invalid RMBs' MRs in SMCRv1 ADD LINK CONT · c308e9ec
      Wen Gu authored
      SMCRv1 has a similar issue to SMCRv2 (see link below) that may access
      invalid MRs of RMBs when construct LLC ADD LINK CONT messages.
      
       BUG: kernel NULL pointer dereference, address: 0000000000000014
       #PF: supervisor read access in kernel mode
       #PF: error_code(0x0000) - not-present page
       PGD 0 P4D 0
       Oops: 0000 [#1] PREEMPT SMP PTI
       CPU: 5 PID: 48 Comm: kworker/5:0 Kdump: loaded Tainted: G W   E      6.4.0-rc3+ #49
       Workqueue: events smc_llc_add_link_work [smc]
       RIP: 0010:smc_llc_add_link_cont+0x160/0x270 [smc]
       RSP: 0018:ffffa737801d3d50 EFLAGS: 00010286
       RAX: ffff964f82144000 RBX: ffffa737801d3dd8 RCX: 0000000000000000
       RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff964f81370c30
       RBP: ffffa737801d3dd4 R08: ffff964f81370000 R09: ffffa737801d3db0
       R10: 0000000000000001 R11: 0000000000000060 R12: ffff964f82e70000
       R13: ffff964f81370c38 R14: ffffa737801d3dd3 R15: 0000000000000001
       FS:  0000000000000000(0000) GS:ffff9652bfd40000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: 0000000000000014 CR3: 000000008fa20004 CR4: 00000000003706e0
       DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
       DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
       Call Trace:
        <TASK>
        smc_llc_srv_rkey_exchange+0xa7/0x190 [smc]
        smc_llc_srv_add_link+0x3ae/0x5a0 [smc]
        smc_llc_add_link_work+0xb8/0x140 [smc]
        process_one_work+0x1e5/0x3f0
        worker_thread+0x4d/0x2f0
        ? __pfx_worker_thread+0x10/0x10
        kthread+0xe5/0x120
        ? __pfx_kthread+0x10/0x10
        ret_from_fork+0x2c/0x50
        </TASK>
      
      When an alernate RNIC is available in system, SMC will try to add a new
      link based on the RNIC for resilience. All the RMBs in use will be mapped
      to the new link. Then the RMBs' MRs corresponding to the new link will
      be filled into LLC messages. For SMCRv1, they are ADD LINK CONT messages.
      
      However smc_llc_add_link_cont() may mistakenly access to unused RMBs which
      haven't been mapped to the new link and have no valid MRs, thus causing a
      crash. So this patch fixes it.
      
      Fixes: 87f88cda ("net/smc: rkey processing for a new link as SMC client")
      Link: https://lore.kernel.org/r/1685101741-74826-3-git-send-email-guwen@linux.alibaba.com
      
      
      Signed-off-by: default avatarWen Gu <guwen@linux.alibaba.com>
      Reviewed-by: default avatarWenjia Zhang <wenjia@linux.ibm.com>
      Reviewed-by: default avatarTony Lu <tonylu@linux.alibaba.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c308e9ec
    • Weihao Gao's avatar
      Fix gitignore for recently added usptream self tests · 02a7eee1
      Weihao Gao authored
      
      
      This resolves the issue that generated binary is showing up as an untracked git file after every build on the kernel.
      
      Signed-off-by: default avatarWeihao Gao <weihaogao@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      02a7eee1
  3. Jun 03, 2023
  4. Jun 02, 2023