1. 26 Apr, 2022 1 commit
  2. 22 Apr, 2022 1 commit
    • Eyal Birger's avatar
      bpf, lwt: Fix crash when using bpf_skb_set_tunnel_key() from bpf_xmit lwt hook · b02d196c
      Eyal Birger authored
      xmit_check_hhlen() observes the dst for getting the device hard header
      length to make sure a modified packet can fit. When a helper which changes
      the dst - such as bpf_skb_set_tunnel_key() - is called as part of the
      xmit program the accessed dst is no longer valid.
      
      This leads to the following splat:
      
       BUG: kernel NULL pointer dereference, address: 00000000000000de
       #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: 0 PID: 798 Comm: ping Not tainted 5.18.0-rc2+ #103
       Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-2 04/01/2014
       RIP: 0010:bpf_xmit+0xfb/0x17f
       Code: c6 c0 4d cd 8e 48 c7 c7 7d 33 f0 8e e8 42 09 fb ff 48 8b 45 58 48 8b 95 c8 00 00 00 48 2b 95 c0 00 00 00 48 83 e0 fe 48 8b 00 <0f> b7 80 de 00 00 00 39 c2 73 22 29 d0 b9 20 0a 00 00 31 d2 48 89
       RSP: 0018:ffffb148c0bc7b98 EFLAGS: 00010282
       RAX: 0000000000000000 RBX: 0000000000240008 RCX: 0000000000000000
       RDX: 0000000000000010 RSI: 00000000ffffffea RDI: 00000000ffffffff
       RBP: ffff922a828a4e00 R08: ffffffff8f1350e8 R09: 00000000ffffdfff
       R10: ffffffff8f055100 R11: ffffffff8f105100 R12: 0000000000000000
       R13: ffff922a828a4e00 R14: 0000000000000040 R15: 0000000000000000
       FS:  00007f414e8f0080(0000) GS:ffff922afdc00000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: 00000000000000de CR3: 0000000002d80006 CR4: 0000000000370ef0
       Call Trace:
        <TASK>
        lwtunnel_xmit.cold+0x71/0xc8
        ip_finish_output2+0x279/0x520
        ? __ip_finish_output.part.0+0x21/0x130
      
      Fix by fetching the device hard header length before running the BPF code.
      
      Fixes: 3a0af8fd ("bpf: BPF for lightweight tunnel infrastructure")
      Signed-off-by: default avatarEyal Birger <eyal.birger@gmail.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Link: https://lore.kernel.org/bpf/20220420165219.1755407-1-eyal.birger@gmail.com
      b02d196c
  3. 11 Apr, 2022 1 commit
  4. 07 Apr, 2022 3 commits
    • Maciej Fijalkowski's avatar
      xsk: Fix l2fwd for copy mode + busy poll combo · 8de8b71b
      Maciej Fijalkowski authored
      While checking AF_XDP copy mode combined with busy poll, strange
      results were observed. rxdrop and txonly scenarios worked fine, but
      l2fwd broke immediately.
      
      After a deeper look, it turned out that for l2fwd, Tx side was exiting
      early due to xsk_no_wakeup() returning true and in the end
      xsk_generic_xmit() was never called. Note that AF_XDP Tx in copy mode
      is syscall steered, so the current behavior is broken.
      
      Txonly scenario only worked due to the fact that
      sk_mark_napi_id_once_xdp() was never called - since Rx side is not in
      the picture for this case and mentioned function is called in
      xsk_rcv_check(), sk::sk_napi_id was never set, which in turn meant that
      xsk_no_wakeup() was returning false (see the sk->sk_napi_id >=
      MIN_NAPI_ID check in there).
      
      To fix this, prefer busy poll in xsk_sendmsg() only when zero copy is
      enabled on a given AF_XDP socket. By doing so, busy poll in copy mode
      would not exit early on Tx side and eventually xsk_generic_xmit() will
      be called.
      
      Fixes: a0731952 ("xsk: Add busy-poll support for {recv,send}msg()")
      Signed-off-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Link: https://lore.kernel.org/bpf/20220406155804.434493-1-maciej.fijalkowski@intel.com
      8de8b71b
    • Duoming Zhou's avatar
      drivers: net: slip: fix NPD bug in sl_tx_timeout() · ec4eb8a8
      Duoming Zhou authored
      When a slip driver is detaching, the slip_close() will act to
      cleanup necessary resources and sl->tty is set to NULL in
      slip_close(). Meanwhile, the packet we transmit is blocked,
      sl_tx_timeout() will be called. Although slip_close() and
      sl_tx_timeout() use sl->lock to synchronize, we don`t judge
      whether sl->tty equals to NULL in sl_tx_timeout() and the
      null pointer dereference bug will happen.
      
         (Thread 1)                 |      (Thread 2)
                                    | slip_close()
                                    |   spin_lock_bh(&sl->lock)
                                    |   ...
      ...                           |   sl->tty = NULL //(1)
      sl_tx_timeout()               |   spin_unlock_bh(&sl->lock)
        spin_lock(&sl->lock);       |
        ...                         |   ...
        tty_chars_in_buffer(sl->tty)|
          if (tty->ops->..) //(2)   |
          ...                       |   synchronize_rcu()
      
      We set NULL to sl->tty in position (1) and dereference sl->tty
      in position (2).
      
      This patch adds check in sl_tx_timeout(). If sl->tty equals to
      NULL, sl_tx_timeout() will goto out.
      Signed-off-by: default avatarDuoming Zhou <duoming@zju.edu.cn>
      Reviewed-by: default avatarJiri Slaby <jirislaby@kernel.org>
      Link: https://lore.kernel.org/r/20220405132206.55291-1-duoming@zju.edu.cnSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      ec4eb8a8
    • Jakub Kicinski's avatar
      Merge https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf · 8e9d0d7a
      Jakub Kicinski authored
      Alexei Starovoitov says:
      
      ====================
      pull-request: bpf 2022-04-06
      
      We've added 8 non-merge commits during the last 8 day(s) which contain
      a total of 9 files changed, 139 insertions(+), 36 deletions(-).
      
      The main changes are:
      
      1) rethook related fixes, from Jiri and Masami.
      
      2) Fix the case when tracing bpf prog is attached to struct_ops, from Martin.
      
      3) Support dual-stack sockets in bpf_tcp_check_syncookie, from Maxim.
      
      * https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf:
        bpf: Adjust bpf_tcp_check_syncookie selftest to test dual-stack sockets
        bpf: Support dual-stack sockets in bpf_tcp_check_syncookie
        bpf: selftests: Test fentry tracing a struct_ops program
        bpf: Resolve to prog->aux->dst_prog->type only for BPF_PROG_TYPE_EXT
        rethook: Fix to use WRITE_ONCE() for rethook:: Handler
        selftests/bpf: Fix warning comparing pointer to 0
        bpf: Fix sparse warnings in kprobe_multi_resolve_syms
        bpftool: Explicit errno handling in skeletons
      ====================
      
      Link: https://lore.kernel.org/r/20220407031245.73026-1-alexei.starovoitov@gmail.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      8e9d0d7a
  5. 06 Apr, 2022 19 commits
  6. 05 Apr, 2022 11 commits
  7. 04 Apr, 2022 4 commits