bpf: tcp: Handle BPF SYN Cookie in skb_steal_sock().
authorKuniyuki Iwashima <kuniyu@amazon.com>
Mon, 15 Jan 2024 20:55:11 +0000 (12:55 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 23 Jan 2024 22:40:24 +0000 (14:40 -0800)
commit8b5ac68fb5ee416537c1214cbacf0ddc4293cce9
treeb34d2e597746829ffeb492a42a3532605e5ddb3c
parent95e752b5299fa8c90099f7bc2aa1ee3e2e2c95ab
bpf: tcp: Handle BPF SYN Cookie in skb_steal_sock().

We will support arbitrary SYN Cookie with BPF.

If BPF prog validates ACK and kfunc allocates a reqsk, it will
be carried to TCP stack as skb->sk with req->syncookie 1.  Also,
the reqsk has its listener as req->rsk_listener with no refcnt
taken.

When the TCP stack looks up a socket from the skb, we steal
inet_reqsk(skb->sk)->rsk_listener in skb_steal_sock() so that
the skb will be processed in cookie_v[46]_check() with the
listener.

Note that we do not clear skb->sk and skb->destructor so that we
can carry the reqsk to cookie_v[46]_check().

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://lore.kernel.org/r/20240115205514.68364-4-kuniyu@amazon.com
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
include/net/request_sock.h