diff options
Diffstat (limited to 'tools/testing/selftests/bpf/progs/test_sockmap_kern.h')
| -rw-r--r-- | tools/testing/selftests/bpf/progs/test_sockmap_kern.h | 26 | 
1 files changed, 18 insertions, 8 deletions
diff --git a/tools/testing/selftests/bpf/progs/test_sockmap_kern.h b/tools/testing/selftests/bpf/progs/test_sockmap_kern.h index 2966564b8497..6c85b00f27b2 100644 --- a/tools/testing/selftests/bpf/progs/test_sockmap_kern.h +++ b/tools/testing/selftests/bpf/progs/test_sockmap_kern.h @@ -235,7 +235,7 @@ SEC("sk_msg1")  int bpf_prog4(struct sk_msg_md *msg)  {  	int *bytes, zero = 0, one = 1, two = 2, three = 3, four = 4, five = 5; -	int *start, *end, *start_push, *end_push, *start_pop, *pop; +	int *start, *end, *start_push, *end_push, *start_pop, *pop, err = 0;  	bytes = bpf_map_lookup_elem(&sock_apply_bytes, &zero);  	if (bytes) @@ -249,8 +249,11 @@ int bpf_prog4(struct sk_msg_md *msg)  		bpf_msg_pull_data(msg, *start, *end, 0);  	start_push = bpf_map_lookup_elem(&sock_bytes, &two);  	end_push = bpf_map_lookup_elem(&sock_bytes, &three); -	if (start_push && end_push) -		bpf_msg_push_data(msg, *start_push, *end_push, 0); +	if (start_push && end_push) { +		err = bpf_msg_push_data(msg, *start_push, *end_push, 0); +		if (err) +			return SK_DROP; +	}  	start_pop = bpf_map_lookup_elem(&sock_bytes, &four);  	pop = bpf_map_lookup_elem(&sock_bytes, &five);  	if (start_pop && pop) @@ -263,6 +266,7 @@ int bpf_prog6(struct sk_msg_md *msg)  {  	int zero = 0, one = 1, two = 2, three = 3, four = 4, five = 5, key = 0;  	int *bytes, *start, *end, *start_push, *end_push, *start_pop, *pop, *f; +	int err = 0;  	__u64 flags = 0;  	bytes = bpf_map_lookup_elem(&sock_apply_bytes, &zero); @@ -279,8 +283,11 @@ int bpf_prog6(struct sk_msg_md *msg)  	start_push = bpf_map_lookup_elem(&sock_bytes, &two);  	end_push = bpf_map_lookup_elem(&sock_bytes, &three); -	if (start_push && end_push) -		bpf_msg_push_data(msg, *start_push, *end_push, 0); +	if (start_push && end_push) { +		err = bpf_msg_push_data(msg, *start_push, *end_push, 0); +		if (err) +			return SK_DROP; +	}  	start_pop = bpf_map_lookup_elem(&sock_bytes, &four);  	pop = bpf_map_lookup_elem(&sock_bytes, &five); @@ -338,7 +345,7 @@ SEC("sk_msg5")  int bpf_prog10(struct sk_msg_md *msg)  {  	int *bytes, *start, *end, *start_push, *end_push, *start_pop, *pop; -	int zero = 0, one = 1, two = 2, three = 3, four = 4, five = 5; +	int zero = 0, one = 1, two = 2, three = 3, four = 4, five = 5, err = 0;  	bytes = bpf_map_lookup_elem(&sock_apply_bytes, &zero);  	if (bytes) @@ -352,8 +359,11 @@ int bpf_prog10(struct sk_msg_md *msg)  		bpf_msg_pull_data(msg, *start, *end, 0);  	start_push = bpf_map_lookup_elem(&sock_bytes, &two);  	end_push = bpf_map_lookup_elem(&sock_bytes, &three); -	if (start_push && end_push) -		bpf_msg_push_data(msg, *start_push, *end_push, 0); +	if (start_push && end_push) { +		err = bpf_msg_push_data(msg, *start_push, *end_push, 0); +		if (err) +			return SK_PASS; +	}  	start_pop = bpf_map_lookup_elem(&sock_bytes, &four);  	pop = bpf_map_lookup_elem(&sock_bytes, &five);  	if (start_pop && pop)  | 
