forked from mirrors/linux
		
	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 <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>
This commit is contained in:
		
							parent
							
								
									07f2c7ab6f
								
							
						
					
					
						commit
						941ff6f11c
					
				
					 1 changed files with 20 additions and 1 deletions
				
			
		| 
						 | 
					@ -21,6 +21,7 @@
 | 
				
			||||||
#include <sys/epoll.h>
 | 
					#include <sys/epoll.h>
 | 
				
			||||||
#include <sys/types.h>
 | 
					#include <sys/types.h>
 | 
				
			||||||
#include <sys/socket.h>
 | 
					#include <sys/socket.h>
 | 
				
			||||||
 | 
					#include <sys/resource.h>
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef ARRAY_SIZE
 | 
					#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 saddr = new_any_sockaddr(p.send_family, sport);
 | 
				
			||||||
	struct sockaddr * const daddr =
 | 
						struct sockaddr * const daddr =
 | 
				
			||||||
		new_loopback_sockaddr(p.send_family, p.recv_port);
 | 
							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)
 | 
						if (fd < 0)
 | 
				
			||||||
		error(1, errno, "failed to create send socket");
 | 
							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()))
 | 
						if (bind(fd, saddr, sockaddr_size()))
 | 
				
			||||||
		error(1, errno, "failed to bind send socket");
 | 
							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)
 | 
					int main(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	fprintf(stderr, "---- IPv4 UDP ----\n");
 | 
						fprintf(stderr, "---- IPv4 UDP ----\n");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue