samples/bpf: all XDP samples should unload xdp/bpf prog on SIGTERM
authorJesper Dangaard Brouer <brouer@redhat.com>
Wed, 15 Aug 2018 14:57:14 +0000 (16:57 +0200)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 16 Aug 2018 19:55:32 +0000 (21:55 +0200)
It is common XDP practice to unload/deattach the XDP bpf program,
when the XDP sample program is Ctrl-C interrupted (SIGINT) or
killed (SIGTERM).

The samples/bpf programs xdp_redirect_cpu and xdp_rxq_info,
forgot to trap signal SIGTERM (which is the default signal used
by the kill command).

This was discovered by Red Hat QA, which automated scripts depend
on killing the XDP sample program after a timeout period.

Fixes: fad3917e361b ("samples/bpf: add cpumap sample program xdp_redirect_cpu")
Fixes: 0fca931a6f21 ("samples/bpf: program demonstrating access to xdp_rxq_info")
Reported-by: Jean-Tsung Hsiao <jhsiao@redhat.com>
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Acked-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
samples/bpf/xdp_redirect_cpu_user.c
samples/bpf/xdp_rxq_info_user.c

index 9a6c7e0a6dd1a7412f43e99da975ac64bc7223c6..2d23054aaccf456c016bde08df1b4d1e95b3c1e7 100644 (file)
@@ -679,8 +679,9 @@ int main(int argc, char **argv)
                return EXIT_FAIL_OPTION;
        }
 
-       /* Remove XDP program when program is interrupted */
+       /* Remove XDP program when program is interrupted or killed */
        signal(SIGINT, int_exit);
+       signal(SIGTERM, int_exit);
 
        if (bpf_set_link_xdp_fd(ifindex, prog_fd[prog_num], xdp_flags) < 0) {
                fprintf(stderr, "link set xdp fd failed\n");
index 248a7eab9531eba322f6fb5b404c9a26a516adba..ef26f882f92f437c741ad2abea2b0547a0336c75 100644 (file)
@@ -567,8 +567,9 @@ int main(int argc, char **argv)
                exit(EXIT_FAIL_BPF);
        }
 
-       /* Remove XDP program when program is interrupted */
+       /* Remove XDP program when program is interrupted or killed */
        signal(SIGINT, int_exit);
+       signal(SIGTERM, int_exit);
 
        if (bpf_set_link_xdp_fd(ifindex, prog_fd, xdp_flags) < 0) {
                fprintf(stderr, "link set xdp fd failed\n");