``` commit f4ff202b333a83faed1f820153ca90a030e95808 Author: Bastien Curutchet (eBPF Foundation) bastien.curutchet@bootlin.com
selftests/bpf: test_xsk: Don't exit immediately when xsk_attach fails
This commit changes xsk_reattach_xdp() and xsk_attach_xdp_progs() from void to int return types to propagate errors instead of calling exit_with_error(), allowing tests to continue after attachment failures.
diff --git a/tools/testing/selftests/bpf/test_xsk.c b/tools/testing/selftests/bpf/test_xsk.c index 7db1d974e..0adb6c0b9 100644 --- a/tools/testing/selftests/bpf/test_xsk.c +++ b/tools/testing/selftests/bpf/test_xsk.c @@ -1643,7 +1643,7 @@ static bool xdp_prog_changed_tx(struct test_spec *test) return ifobj->xdp_prog != test->xdp_prog_tx || ifobj->mode != test->mode; }
-static void xsk_reattach_xdp(struct ifobject *ifobj, struct bpf_program *xdp_prog, +static int xsk_reattach_xdp(struct ifobject *ifobj, struct bpf_program *xdp_prog, struct bpf_map *xskmap, enum test_mode mode) { int err; @@ -1652,31 +1652,40 @@ static void xsk_reattach_xdp(struct ifobject *ifobj, struct bpf_program *xdp_pro err = xsk_attach_xdp_program(xdp_prog, ifobj->ifindex, mode_to_xdp_flags(mode)); if (err) { ksft_print_msg("Error attaching XDP program\n");
exit_with_error(-err);
return err;}
if (ifobj->mode != mode && (mode == TEST_MODE_DRV || mode == TEST_MODE_ZC)) if (!xsk_is_in_mode(ifobj->ifindex, XDP_FLAGS_DRV_MODE)) { ksft_print_msg("ERROR: XDP prog not in DRV mode\n");
exit_with_error(EINVAL);
return -EINVAL;}
ifobj->xdp_prog = xdp_prog; ifobj->xskmap = xskmap; ifobj->mode = mode;
return 0;
Can xsk_reattach_xdp() leave the XDP program attached when the mode check fails?
The flow is: 1. xsk_detach_xdp_program() removes old XDP program 2. xsk_attach_xdp_program() attaches new program (succeeds) 3. xsk_is_in_mode() check fails 4. ifobj state updated to reflect new attachment 5. Returns -EINVAL
At this point the new XDP program is attached to the interface but the function returned an error. Should the newly attached program be detached on this error path, or should the ifobj state updates be moved after all checks pass?
}
-static void xsk_attach_xdp_progs(struct test_spec *test, struct ifobject *ifobj_rx, +static int xsk_attach_xdp_progs(struct test_spec *test, struct ifobject *ifobj_rx, struct ifobject *ifobj_tx) {
[ ... ]
@@ -1789,7 +1798,8 @@ static int testapp_validate_traffic(struct test_spec *test) } }
- xsk_attach_xdp_progs(test, ifobj_rx, ifobj_tx);
- if (xsk_attach_xdp_progs(test, ifobj_rx, ifobj_tx))
return __testapp_validate_traffic(test, ifobj_rx, ifobj_tx);return TEST_FAILURE;}
```
--- AI reviewed your patch. Please fix the bug or email reply why it's not a bug. See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md
In-Reply-To-Subject: `selftests/bpf: test_xsk: Don't exit immediately when xsk_attach fails` CI run summary: https://github.com/kernel-patches/bpf/actions/runs/18966766839