bpf: fix rlimit in reuseport net selftest

"Linux Kernel Mailing List" <[email protected]>
Newsgroups gmane.linux.kernel.commits.head
Message-ID <[email protected]>
Web:        https://git.kernel.org/torvalds/c/941ff6f11c020913f5cddf543a9ec63475d7c082
Commit:     941ff6f11c020913f5cddf543a9ec63475d7c082
Parent:     07f2c7ab6f8d0a7e7c5764c4e6cc9c52951b9d9c
Refname:    refs/heads/master
Author:     Daniel Borkmann <[email protected]>
AuthorDate: Fri Feb 9 14:49:44 2018 +0100
Committer:  David S. Miller <[email protected]>
CommitDate: Fri Feb 9 14:46:37 2018 -0500

    bpf: fix rlimit in reuseport net selftest
    
    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 <[email protected]>
    Link: https://bugs.linaro.org/show_bug.cgi?id=3502
    Signed-off-by: Daniel Borkmann <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
---
 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");
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.