lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Mon, 23 Nov 2020 13:20:51 +0100
From:   Björn Töpel <bjorn.topel@...el.com>
To:     Yonghong Song <yhs@...com>,
        Weqaar Janjua <weqaar.janjua@...il.com>, bpf@...r.kernel.org,
        netdev@...r.kernel.org, daniel@...earbox.net, ast@...nel.org,
        magnus.karlsson@...il.com
Cc:     Weqaar Janjua <weqaar.a.janjua@...el.com>, shuah@...nel.org,
        skhan@...uxfoundation.org, linux-kselftest@...r.kernel.org,
        anders.roxell@...aro.org, jonathan.lemon@...il.com
Subject: Re: [PATCH bpf-next v2 0/5] selftests/bpf: xsk selftests

On 2020-11-21 01:31, Yonghong Song wrote:
> 
> 
> On 11/20/20 5:00 AM, Weqaar Janjua wrote:
>> This patch set adds AF_XDP selftests based on veth to selftests/bpf.
>>
>> # Topology:
>> # ---------
>> #                 -----------
>> #               _ | Process | _
>> #              /  -----------  \
>> #             /        |        \
>> #            /         |         \
>> #      -----------     |     -----------
>> #      | Thread1 |     |     | Thread2 |
>> #      -----------     |     -----------
>> #           |          |          |
>> #      -----------     |     -----------
>> #      |  xskX   |     |     |  xskY   |
>> #      -----------     |     -----------
>> #           |          |          |
>> #      -----------     |     ----------
>> #      |  vethX  | --------- |  vethY |
>> #      -----------   peer    ----------
>> #           |          |          |
>> #      namespaceX      |     namespaceY
>>
>> These selftests test AF_XDP SKB and Native/DRV modes using veth Virtual
>> Ethernet interfaces.
>>
>> The test program contains two threads, each thread is single socket with
>> a unique UMEM. It validates in-order packet delivery and packet content
>> by sending packets to each other.
>>
>> Prerequisites setup by script test_xsk_prerequisites.sh:
>>
>>     Set up veth interfaces as per the topology shown ^^:
>>     * setup two veth interfaces and one namespace
>>     ** veth<xxxx> in root namespace
>>     ** veth<yyyy> in af_xdp<xxxx> namespace
>>     ** namespace af_xdp<xxxx>
>>     * create a spec file veth.spec that includes this run-time 
>> configuration
>>       that is read by test scripts - filenames prefixed with test_xsk_
>>     *** xxxx and yyyy are randomly generated 4 digit numbers used to 
>> avoid
>>         conflict with any existing interface
>>
>> The following tests are provided:
>>
>> 1. AF_XDP SKB mode
>>     Generic mode XDP is driver independent, used when the driver does
>>     not have support for XDP. Works on any netdevice using sockets and
>>     generic XDP path. XDP hook from netif_receive_skb().
>>     a. nopoll - soft-irq processing
>>     b. poll - using poll() syscall
>>     c. Socket Teardown
>>        Create a Tx and a Rx socket, Tx from one socket, Rx on another.
>>        Destroy both sockets, then repeat multiple times. Only nopoll mode
>>       is used
>>     d. Bi-directional Sockets
>>        Configure sockets as bi-directional tx/rx sockets, sets up fill
>>       and completion rings on each socket, tx/rx in both directions.
>>       Only nopoll mode is used
>>
>> 2. AF_XDP DRV/Native mode
>>     Works on any netdevice with XDP_REDIRECT support, driver dependent.
>>     Processes packets before SKB allocation. Provides better performance
>>     than SKB. Driver hook available just after DMA of buffer descriptor.
>>     a. nopoll
>>     b. poll
>>     c. Socket Teardown
>>     d. Bi-directional Sockets
>>     * Only copy mode is supported because veth does not currently support
>>       zero-copy mode
>>
>> Total tests: 8
>>
>> Flow:
>> * Single process spawns two threads: Tx and Rx
>> * Each of these two threads attach to a veth interface within their
>>    assigned namespaces
>> * Each thread creates one AF_XDP socket connected to a unique umem
>>    for each veth interface
>> * Tx thread transmits 10k packets from veth<xxxx> to veth<yyyy>
>> * Rx thread verifies if all 10k packets were received and delivered
>>    in-order, and have the right content
>>
>> v2 changes:
>> * Move selftests/xsk to selftests/bpf
>> * Remove Makefiles under selftests/xsk, and utilize 
>> selftests/bpf/Makefile
>>
>> Structure of the patch set:
>>
>> Patch 1: This patch adds XSK Selftests framework under selftests/bpf
>> Patch 2: Adds tests: SKB poll and nopoll mode, and mac-ip-udp debug
>> Patch 3: Adds tests: DRV poll and nopoll mode
>> Patch 4: Adds tests: SKB and DRV Socket Teardown
>> Patch 5: Adds tests: SKB and DRV Bi-directional Sockets
> 
> I just want to report that after applying the above 5 patches
> on top of bpf-next commit 450d060e8f75 ("bpftool: Add {i,d}tlb_misses 
> support for bpftool profile"), I hit the following error with below 
> command sequences:
> 
>   $ ./test_xsk_prerequisites.sh
>   $ ./test_xsk_skb_poll.sh
> # Interface found: ve1480
> # Interface found: ve9258
> # NS switched: af_xdp9258
> 1..1
> # Interface [ve9258] vector [Rx]
> # Interface [ve1480] vector [Tx]
> # Sending 10000 packets on interface ve1480
> [  331.741244] ------------[ cut here ]------------
> [  331.741741] kernel BUG at net/core/skbuff.c:1621!
> [  331.742265] invalid opcode: 0000 [#1] PREEMPT SMP PTI
> [  331.742837] CPU: 0 PID: 1883 Comm: xdpxceiver Not tainted 5.10.0-rc3+ 
> #1037
> [  331.743468] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), 
> BIOS 1.9.3
> -1.el7.centos 04/01/2014
> [  331.744300] RIP: 0010:pskb_expand_head+0x27b/0x310

Ugh, looks like the tests are working. :-P

This is a BUG_ON(skb_shared(skb)) trigger, related to the skbuff 
refcount changes done recently in AF_XDP.

I'll cook a patch! Thanks for the report!


Björn

Powered by blists - more mailing lists