1. 17 11月, 2016 1 次提交
    • Y
      IB/rxe: Fix kernel panic in UDP tunnel with GRO and RX checksum · 1454ca3a
      Yonatan Cohen 提交于
      Missing initialization of udp_tunnel_sock_cfg causes to following
      kernel panic, while kernel tries to execute gro_receive().
      
      While being there, we converted udp_port_cfg to use the same
      initialization scheme as udp_tunnel_sock_cfg.
      
      ------------[ cut here ]------------
      kernel tried to execute NX-protected page - exploit attempt? (uid: 0)
      BUG: unable to handle kernel paging request at ffffffffa0588c50
      IP: [<ffffffffa0588c50>] __this_module+0x50/0xffffffffffff8400 [ib_rxe]
      PGD 1c09067 PUD 1c0a063 PMD bb394067 PTE 80000000ad5e8163
      Oops: 0011 [#1] SMP
      Modules linked in: ib_rxe ip6_udp_tunnel udp_tunnel
      CPU: 5 PID: 0 Comm: swapper/5 Not tainted 4.7.0-rc3+ #2
      Hardware name: Red Hat KVM, BIOS Bochs 01/01/2011
      task: ffff880235e4e680 ti: ffff880235e68000 task.ti: ffff880235e68000
      RIP: 0010:[<ffffffffa0588c50>]
      [<ffffffffa0588c50>] __this_module+0x50/0xffffffffffff8400 [ib_rxe]
      RSP: 0018:ffff880237343c80  EFLAGS: 00010282
      RAX: 00000000dffe482d RBX: ffff8800ae330900 RCX: 000000002001b712
      RDX: ffff8800ae330900 RSI: ffff8800ae102578 RDI: ffff880235589c00
      RBP: ffff880237343cb0 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000000 R12: ffff8800ae33e262
      R13: ffff880235589c00 R14: 0000000000000014 R15: ffff8800ae102578
      FS:  0000000000000000(0000) GS:ffff880237340000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: ffffffffa0588c50 CR3: 0000000001c06000 CR4: 00000000000006e0
      Stack:
      ffffffff8160860e ffff8800ae330900 ffff8800ae102578 0000000000000014
      000000000000004e ffff8800ae102578 ffff880237343ce0 ffffffff816088fb
      0000000000000000 ffff8800ae330900 0000000000000000 00000000ffad0000
      Call Trace:
      <IRQ>
      [<ffffffff8160860e>] ? udp_gro_receive+0xde/0x130
      [<ffffffff816088fb>] udp4_gro_receive+0x10b/0x2d0
      [<ffffffff81611373>] inet_gro_receive+0x1d3/0x270
      [<ffffffff81594e29>] dev_gro_receive+0x269/0x3b0
      [<ffffffff81595188>] napi_gro_receive+0x38/0x120
      [<ffffffffa011caee>] mlx5e_handle_rx_cqe+0x27e/0x340 [mlx5_core]
      [<ffffffffa011d076>] mlx5e_poll_rx_cq+0x66/0x6d0 [mlx5_core]
      [<ffffffffa011d7ae>] mlx5e_napi_poll+0x8e/0x400 [mlx5_core]
      [<ffffffff815949a0>] net_rx_action+0x160/0x380
      [<ffffffff816a9197>] __do_softirq+0xd7/0x2c5
      [<ffffffff81085c35>] irq_exit+0xf5/0x100
      [<ffffffff816a8f16>] do_IRQ+0x56/0xd0
      [<ffffffff816a6dcc>] common_interrupt+0x8c/0x8c
      <EOI>
      [<ffffffff81061f96>] ? native_safe_halt+0x6/0x10
      [<ffffffff81037ade>] default_idle+0x1e/0xd0
      [<ffffffff8103828f>] arch_cpu_idle+0xf/0x20
      [<ffffffff810c37dc>] default_idle_call+0x3c/0x50
      [<ffffffff810c3b13>] cpu_startup_entry+0x323/0x3c0
      [<ffffffff81050d8c>] start_secondary+0x15c/0x1a0
      RIP  [<ffffffffa0588c50>] __this_module+0x50/0xffffffffffff8400 [ib_rxe]
      RSP <ffff880237343c80>
      CR2: ffffffffa0588c50
      ---[ end trace 489ee31fa7614ac5 ]---
      Kernel panic - not syncing: Fatal exception in interrupt
      Kernel Offset: disabled
      ---[ end Kernel panic - not syncing: Fatal exception in interrupt
      ------------[ cut here ]------------
      
      Fixes: 8700e3e7 ("Soft RoCE driver")
      Signed-off-by: NYonatan Cohen <yonatanc@mellanox.com>
      Reviewed-by: NMoni Shoua <monis@mellanox.com>
      Signed-off-by: NLeon Romanovsky <leon@kernel.org>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      1454ca3a
  2. 07 10月, 2016 2 次提交
    • P
      IB/rxe: improved debug prints & code cleanup · e404f945
      Parav Pandit 提交于
      1. Debugging qp state transitions and qp errors in loopback and
      multiple QP tests is difficult without qp numbers in debug logs.
      This patch adds qp number to important debug logs.
      
      2. Instead of having rxe: prefix in few logs and not having in
      few logs, using uniform module name prefix using pr_fmt macro.
      
      3. Code cleanup for various warnings reported by checkpatch for
      incomplete unsigned data type, line over 80 characters, return
      statements.
      Signed-off-by: NParav Pandit <pandit.parav@gmail.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      e404f945
    • P
      IB/rxe: Fix sending out loopback packet on netdev interface. · ffae955d
      Parav Pandit 提交于
      Both prepare4 and prepare6 sets loopback mask in pkt_info structure
      instance of skb.  The xmit_packet and other requester side functions
      use a pkt_info struct from the stack without the proper mask.  This
      results in sending out the packet to the actual netdev device and
      loopback functionality is broken.
      
      Modify prepare() to pass its correctly marked pkt_info struct to
      prepare4() and prepare6() instead of them using SKB_TO_PKT(skb) and
      getting an incorrectly set mask.
      
      Verified with perftest applications.
      Signed-off-by: NParav Pandit <pandit.parav@gmail.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      ffae955d
  3. 17 9月, 2016 1 次提交
    • Y
      IB/rxe: Fix kernel panic in udp_setup_tunnel · dfdd6158
      Yonatan Cohen 提交于
      Disable creation of a UDP socket for ipv6 when
      CONFIG_IPV6 is not enabeld. Since udp_sock_create6()
      returns 0 when CONFIG_IPV6 is not set
      
      [   46.888632] IP: [<c220705a>] setup_udp_tunnel_sock+0x6/0x4f
      [   46.891355] *pdpt = 0000000000000000 *pde = f000ff53f000ff53
      [   46.893918] Oops: 0002 [#1] PREEMPT
      [   46.896014] CPU: 0 PID: 1 Comm: swapper Not tainted 4.7.0-rc4-00001-g8700e3e7 #1
      [   46.900280] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Debian-1.8.2-1 04/01/2014
      [   46.904905] task: cf06c040 ti: cf05e000 task.ti: cf05e000
      [   46.907854] EIP: 0060:[<c220705a>] EFLAGS: 00210246 CPU: 0
      [   46.911137] EIP is at setup_udp_tunnel_sock+0x6/0x4f
      [   46.914070] EAX: 00000044 EBX: 00000001 ECX: cf05fef0 EDX: ca8142e0
      [   46.917236] ESI: c2c4505b EDI: cf05fef0 EBP: cf05fed0 ESP: cf05fed0
      [   46.919836]  DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068
      [   46.922046] CR0: 80050033 CR2: 000001fc CR3: 02cec000 CR4: 000006b0
      [   46.924550] Stack:
      [   46.926014]  cf05ff10 c1fd4657 ca8142e0 0000000a 00000000 00000000 0000b712 00000008
      [   46.931274]  00000000 6bb5bd01 c1fd48de 00000000 00000000 cf05ff1c 00000000 00000000
      [   46.936122]  cf05ff1c c1fd4bdf 00000000 cf05ff28 c2c4507b ffffffff cf05ff88 c2bf1c74
      [   46.942350] Call Trace:
      [   46.944403]  [<c1fd4657>] rxe_setup_udp_tunnel+0x8f/0x99
      [   46.947689]  [<c1fd48de>] ? net_to_rxe+0x4e/0x4e
      [   46.950567]  [<c1fd4bdf>] rxe_net_init+0xe/0xa4
      [   46.953147]  [<c2c4507b>] rxe_module_init+0x20/0x4c
      [   46.955448]  [<c2bf1c74>] do_one_initcall+0x89/0x113
      [   46.957797]  [<c2bf15eb>] ? set_debug_rodata+0xf/0xf
      [   46.959966]  [<c2bf1dbc>] ? kernel_init_freeable+0xbe/0x15b
      [   46.962262]  [<c2bf1ddc>] kernel_init_freeable+0xde/0x15b
      [   46.964418]  [<c232eb54>] kernel_init+0x8/0xd0
      [   46.966618]  [<c2333122>] ret_from_kernel_thread+0xe/0x24
      [   46.969592]  [<c232eb4c>] ? rest_init+0x6f/0x6f
      
      Fixes: 8700e3e7 ("Soft RoCE driver")
      Signed-off-by: NYonatan Cohen <yonatanc@mellanox.com>
      Signed-off-by: NLeon Romanovsky <leon@kernel.org>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      dfdd6158
  4. 04 8月, 2016 1 次提交
    • M
      Soft RoCE driver · 8700e3e7
      Moni Shoua 提交于
      Soft RoCE (RXE) - The software RoCE driver
      
      ib_rxe implements the RDMA transport and registers to the RDMA core
      device as a kernel verbs provider. It also implements the packet IO
      layer. On the other hand ib_rxe registers to the Linux netdev stack
      as a udp encapsulating protocol, in that case RDMA, for sending and
      receiving packets over any Ethernet device.  This yields a RDMA
      transport over the UDP/Ethernet network layer forming a RoCEv2
      compatible device.
      
      The configuration procedure of the Soft RoCE drivers requires
      binding to any existing Ethernet network device. This is done with
      /sys interface.
      
      A userspace Soft RoCE library (librxe) provides user applications
      the ability to run with Soft RoCE devices.  The use of rxe verbs ins
      user space requires the inclusion of librxe as a device specifics
      plug-in to libibverbs. librxe is packaged separately.
      
      Architecture:
      
           +-----------------------------------------------------------+
           |                          Application                      |
           +-----------------------------------------------------------+
                                  +-----------------------------------+
                                  |             libibverbs            |
      User                        +-----------------------------------+
                                  +----------------+ +----------------+
                                  | librxe         | | HW RoCE lib    |
                                  +----------------+ +----------------+
      +---------------------------------------------------------------+
           +--------------+                           +------------+
           | Sockets      |                           | RDMA ULP   |
           +--------------+                           +------------+
           +--------------+                  +---------------------+
           | TCP/IP       |                  | ib_core             |
           +--------------+                  +---------------------+
                                   +------------+ +----------------+
      Kernel                       | ib_rxe     | | HW RoCE driver |
                                   +------------+ +----------------+
           +------------------------------------+
           | NIC driver                         |
           +------------------------------------+
      
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           +-----------------------------------------------------------+
           |                          Application                      |
           +-----------------------------------------------------------+
                                  +-----------------------------------+
                                  |             libibverbs            |
      User                        +-----------------------------------+
                                  +----------------+ +----------------+
                                  | librxe         | | HW RoCE lib    |
                                  +----------------+ +----------------+
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           +--------------+                           +------------+
           | Sockets      |                           | RDMA ULP   |
           +--------------+                           +------------+
           +--------------+                  +---------------------+
           | TCP/IP       |                  | ib_core             |
           +--------------+                  +---------------------+
                                   +------------+ +----------------+
      Kernel                       | ib_rxe     | | HW RoCE driver |
                                   +------------+ +----------------+
           +------------------------------------+
           | NIC driver                         |
           +------------------------------------+
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      Soft RoCE resources:
      
      [1[ https://github.com/SoftRoCE/librxe-dev librxe - source code in
      Github
      [2] https://github.com/SoftRoCE/rxe-dev/wiki/rxe-dev:-Home - Soft RoCE
      Wiki page
      [3] https://github.com/SoftRoCE/librxe-dev - Soft RoCE userspace library
      Signed-off-by: NKamal Heib <kamalh@mellanox.com>
      Signed-off-by: NAmir Vadai <amirv@mellanox.com>
      Signed-off-by: NMoni Shoua <monis@mellanox.com>
      Reviewed-by: NHaggai Eran <haggaie@mellanox.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      8700e3e7