Skip to content

Commit 9beb8be

Browse files
borkmanndavem330
authored andcommitted
bpf: make error reporting in bpf_warn_invalid_xdp_action more clear
Differ between illegal XDP action code and just driver unsupported one to provide better feedback when we throw a one-time warning here. Reason is that with 814abfa ("xdp: add bpf_redirect helper function") not all drivers support the new XDP return code yet and thus they will fall into their 'default' case when checking for return codes after program return, which then triggers a bpf_warn_invalid_xdp_action() stating that the return code is illegal, but from XDP perspective it's not. I decided not to place something like a XDP_ACT_MAX define into uapi i) given we don't have this either for all other program types, ii) future action codes could have further encoding there, which would render such define unsuitable and we wouldn't be able to rip it out again, and iii) we rarely add new action codes. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent a010a2f commit 9beb8be

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

include/uapi/linux/bpf.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -766,8 +766,8 @@ struct bpf_sock {
766766

767767
/* User return codes for XDP prog type.
768768
* A valid XDP program must return one of these defined values. All other
769-
* return codes are reserved for future use. Unknown return codes will result
770-
* in packet drop.
769+
* return codes are reserved for future use. Unknown return codes will
770+
* result in packet drops and a warning via bpf_warn_invalid_xdp_action().
771771
*/
772772
enum xdp_action {
773773
XDP_ABORTED = 0,

net/core/filter.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3609,7 +3609,11 @@ static bool xdp_is_valid_access(int off, int size,
36093609

36103610
void bpf_warn_invalid_xdp_action(u32 act)
36113611
{
3612-
WARN_ONCE(1, "Illegal XDP return value %u, expect packet loss\n", act);
3612+
const u32 act_max = XDP_REDIRECT;
3613+
3614+
WARN_ONCE(1, "%s XDP return value %u, expect packet loss!\n",
3615+
act > act_max ? "Illegal" : "Driver unsupported",
3616+
act);
36133617
}
36143618
EXPORT_SYMBOL_GPL(bpf_warn_invalid_xdp_action);
36153619

0 commit comments

Comments
 (0)