]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
selftests: bpf: Ignore FIN packets for reuseport tests
authorLorenz Bauer <lmb@cloudflare.com>
Fri, 24 Jan 2020 11:27:52 +0000 (11:27 +0000)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 24 Jan 2020 21:12:13 +0000 (22:12 +0100)
The reuseport tests currently suffer from a race condition: FIN
packets count towards DROP_ERR_SKB_DATA, since they don't contain
a valid struct cmd. Tests will spuriously fail depending on whether
check_results is called before or after the FIN is processed.

Exit the BPF program early if FIN is set.

Fixes: 91134d849a0e ("bpf: Test BPF_PROG_TYPE_SK_REUSEPORT")
Signed-off-by: Lorenz Bauer <lmb@cloudflare.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/bpf/20200124112754.19664-3-lmb@cloudflare.com
tools/testing/selftests/bpf/progs/test_select_reuseport_kern.c

index d69a1f2bbbfde5a074aa52819324d386035cafd6..26e77dcc7e91da2127b67f56c36fdf612ac9c924 100644 (file)
@@ -113,6 +113,12 @@ int _select_by_skb_data(struct sk_reuseport_md *reuse_md)
                data_check.skb_ports[0] = th->source;
                data_check.skb_ports[1] = th->dest;
 
+               if (th->fin)
+                       /* The connection is being torn down at the end of a
+                        * test. It can't contain a cmd, so return early.
+                        */
+                       return SK_PASS;
+
                if ((th->doff << 2) + sizeof(*cmd) > data_check.len)
                        GOTO_DONE(DROP_ERR_SKB_DATA);
                if (bpf_skb_load_bytes(reuse_md, th->doff << 2, &cmd_copy,