Commit 8bec4f66 authored by Lorenz Bauer's avatar Lorenz Bauer Committed by Daniel Borkmann

selftests: bpf: Ignore FIN packets for reuseport tests

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: 91134d84 ("bpf: Test BPF_PROG_TYPE_SK_REUSEPORT")
Signed-off-by: default avatarLorenz Bauer <lmb@cloudflare.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Reviewed-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/bpf/20200124112754.19664-3-lmb@cloudflare.com
parent c31dbb1e
...@@ -113,6 +113,12 @@ int _select_by_skb_data(struct sk_reuseport_md *reuse_md) ...@@ -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[0] = th->source;
data_check.skb_ports[1] = th->dest; 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) if ((th->doff << 2) + sizeof(*cmd) > data_check.len)
GOTO_DONE(DROP_ERR_SKB_DATA); GOTO_DONE(DROP_ERR_SKB_DATA);
if (bpf_skb_load_bytes(reuse_md, th->doff << 2, &cmd_copy, if (bpf_skb_load_bytes(reuse_md, th->doff << 2, &cmd_copy,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment