lkml.org 
[lkml]   [2018]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.15 178/189] bpf: fix rlimit in reuseport net selftest
    Date
    From: Daniel Borkmann <daniel@iogearbox.net>

    [ Upstream commit 941ff6f11c020913f5cddf543a9ec63475d7c082 ]

    Fix two issues in the reuseport_bpf selftests that were
    reported by Linaro CI:

    [...]
    + ./reuseport_bpf
    ---- IPv4 UDP ----
    Testing EBPF mod 10...
    Reprograming, testing mod 5...
    ./reuseport_bpf: ebpf error. log:
    0: (bf) r6 = r1
    1: (20) r0 = *(u32 *)skb[0]
    2: (97) r0 %= 10
    3: (95) exit
    processed 4 insns
    : Operation not permitted
    + echo FAIL
    [...]
    ---- IPv4 TCP ----
    Testing EBPF mod 10...
    ./reuseport_bpf: failed to bind send socket: Address already in use
    + echo FAIL
    [...]

    For the former adjust rlimit since this was the cause of
    failure for loading the BPF prog, and for the latter add
    SO_REUSEADDR.

    Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org>
    Link: https://bugs.linaro.org/show_bug.cgi?id=3502
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    tools/testing/selftests/net/reuseport_bpf.c | 21 ++++++++++++++++++++-
    1 file changed, 20 insertions(+), 1 deletion(-)

    diff --git a/tools/testing/selftests/net/reuseport_bpf.c b/tools/testing/selftests/net/reuseport_bpf.c
    index 4a8217448f20..cad14cd0ea92 100644
    --- a/tools/testing/selftests/net/reuseport_bpf.c
    +++ b/tools/testing/selftests/net/reuseport_bpf.c
    @@ -21,6 +21,7 @@
    #include <sys/epoll.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    +#include <sys/resource.h>
    #include <unistd.h>

    #ifndef ARRAY_SIZE
    @@ -190,11 +191,14 @@ static void send_from(struct test_params p, uint16_t sport, char *buf,
    struct sockaddr * const saddr = new_any_sockaddr(p.send_family, sport);
    struct sockaddr * const daddr =
    new_loopback_sockaddr(p.send_family, p.recv_port);
    - const int fd = socket(p.send_family, p.protocol, 0);
    + const int fd = socket(p.send_family, p.protocol, 0), one = 1;

    if (fd < 0)
    error(1, errno, "failed to create send socket");

    + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)))
    + error(1, errno, "failed to set reuseaddr");
    +
    if (bind(fd, saddr, sockaddr_size()))
    error(1, errno, "failed to bind send socket");

    @@ -433,6 +437,21 @@ void enable_fastopen(void)
    }
    }

    +static struct rlimit rlim_old, rlim_new;
    +
    +static __attribute__((constructor)) void main_ctor(void)
    +{
    + getrlimit(RLIMIT_MEMLOCK, &rlim_old);
    + rlim_new.rlim_cur = rlim_old.rlim_cur + (1UL << 20);
    + rlim_new.rlim_max = rlim_old.rlim_max + (1UL << 20);
    + setrlimit(RLIMIT_MEMLOCK, &rlim_new);
    +}
    +
    +static __attribute__((destructor)) void main_dtor(void)
    +{
    + setrlimit(RLIMIT_MEMLOCK, &rlim_old);
    +}
    +
    int main(void)
    {
    fprintf(stderr, "---- IPv4 UDP ----\n");
    --
    2.15.1
    \
     
     \ /
      Last update: 2018-04-09 05:34    [W:4.188 / U:0.452 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site