bpf: clarify error expectations from bpf_clone_redirect
Subsystems (3)
PATCH v2 1/2 bpf: clarify error expectations from bpf_clone_redirect
Commit 151e887d8ff9 ("veth: Fixing transmit return status for dropped packets") exposed the fact that bpf_clone_redirect is capable of returning raw NET_XMIT_XXX return codes.
This is in the conflict with its UAPI doc which says the following:
"0 on success, or a negative error in case of failure."
Update the UAPI to reflect the fact that bpf_clone_redirect can return positive error numbers, but don't explicitly define their meaning.
--- include/uapi/linux/bpf.h | 4 +++- tools/include/uapi/linux/bpf.h | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-)
include/uapi/linux/bpf.h +3 -1
@@ -1969,7 +1969,9 @@ union bpf_attr {* performed again, if the helper is used in combination with * direct packet access. * Return -* 0 on success, or a negative error in case of failure. +* 0 on success, or a negative error in case of failure. Positive +* error indicates a potential drop or congestion in the target +* device. The particular positive error codes are not defined. * * u64 bpf_get_current_pid_tgid(void) * Description
tools/include/uapi/linux/bpf.h +3 -1
@@ -1969,7 +1969,9 @@ union bpf_attr {* performed again, if the helper is used in combination with * direct packet access. * Return -* 0 on success, or a negative error in case of failure. +* 0 on success, or a negative error in case of failure. Positive +* error indicates a potential drop or congestion in the target +* device. The particular positive error codes are not defined. * * u64 bpf_get_current_pid_tgid(void) * Description
Signature · 1 line
2.42.0.283.g2d96d420d3-goog
PATCH v2 2/2 selftests/bpf: update bpf_clone_redirect expected return code
Commit 151e887d8ff9 ("veth: Fixing transmit return status for dropped packets") started propagating proper NET_XMIT_DROP error to the caller which means it's now possible to get positive error code when calling bpf_clone_redirect() in this particular test. Update the test to reflect that.
--- tools/testing/selftests/bpf/prog_tests/empty_skb.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
tools/testing/selftests/bpf/prog_tests/empty_skb.c +10 -2
@@ -24,6 +24,7 @@ void test_empty_skb(void)int *ifindex;int err;int ret; +int lwt_egress_ret;/* expected retval at lwt/egress */ bool success_on_tc; } tests[] = {/* Empty packets are always rejected. */
@@ -57,6 +58,7 @@ void test_empty_skb(void) .data_size_in = sizeof(eth_hlen), .ifindex = &veth_ifindex, .ret = -ERANGE, + .lwt_egress_ret = -ERANGE, .success_on_tc = true, }, {
@@ -70,6 +72,7 @@ void test_empty_skb(void) .data_size_in = sizeof(eth_hlen), .ifindex = &ipip_ifindex, .ret = -ERANGE, + .lwt_egress_ret = -ERANGE, },/* ETH_HLEN+1-sized packet should be redirected. */
@@ -79,6 +82,7 @@ void test_empty_skb(void) .data_in = eth_hlen_pp, .data_size_in = sizeof(eth_hlen_pp), .ifindex = &veth_ifindex, + .lwt_egress_ret = 1, /* veth_xmit NET_XMIT_DROP */ }, { .msg = "ipip ETH_HLEN+1 packet ingress",
@@ -108,8 +112,12 @@ void test_empty_skb(void)for (i =0 ; i <ARRAY_SIZE (tests); i++) {bpf_object__for_each_program (prog, bpf_obj->obj) { -char buf[128 ]; +bool at_egress =strstr (bpf_program__name (prog),"egress" ) !=NULL ;bool at_tc = !strncmp (bpf_program__section_name (prog),"tc" ,2 ); +int expected_ret; +char buf[128 ]; + + expected_ret = at_egress && !at_tc ? tests[i].lwt_egress_ret : tests[i].ret; tattr.data_in = tests[i].data_in; tattr.data_size_in = tests[i].data_size_in;
@@ -128,7 +136,7 @@ void test_empty_skb(void)if (at_tc && tests[i].success_on_tc)ASSERT_GE (bpf_obj->bss->ret,0 , buf);else -ASSERT_EQ (bpf_obj->bss->ret, tests[i].ret, buf); +ASSERT_EQ (bpf_obj->bss->ret, expected_ret, buf); } }
Signature · 1 line
2.42.0.283.g2d96d420d3-goog
This series was applied to bpf/bpf.git (master) by Daniel Borkmann <[email protected]>:
Hello:
This series was applied to bpf/bpf.git (master)
by Daniel Borkmann <[email protected]>:
Quoted 8 lines · On Mon, 11 Sep 2023 12:47:30 -0700 you wrote:
Commit
151e887d8ff9("veth: Fixing transmit return status for dropped packets") exposed the fact thatbpf_clone_redirectis capable of returning rawNET_XMIT_XXXreturn codes.This is in the conflict with its UAPI doc which says the following:
"0 on success, or a negative error in case of failure."[...]
Here is the summary with links:
- [bpf-next,v2,1/2] bpf: clarify error expectations from bpf_clone_redirect
https://git.kernel.org/bpf/bpf/c/7cb779a6867f - [bpf-next,v2,2/2] selftests/bpf: update bpf_clone_redirect expected return code https://git.kernel.org/bpf/bpf/c/b772b70b6904
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html