]> git.baikalelectronics.ru Git - kernel.git/commit
skmsg: Improve udp_bpf_recvmsg() accuracy
authorCong Wang <cong.wang@bytedance.com>
Tue, 15 Jun 2021 02:13:35 +0000 (19:13 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 21 Jun 2021 14:48:11 +0000 (16:48 +0200)
commite21c8cc7b0d8b8c4026c2104353bbb874d122734
tree42bfdf373fe8a554dc733cfb558e989e4e8dfae0
parenta6c1b1ce30ab7bd04d9804c893ca84ce45013009
skmsg: Improve udp_bpf_recvmsg() accuracy

I tried to reuse sk_msg_wait_data() for different protocols,
but it turns out it can not be simply reused. For example,
UDP actually uses two queues to receive skb:
udp_sk(sk)->reader_queue and sk->sk_receive_queue. So we have
to check both of them to know whether we have received any
packet.

Also, UDP does not lock the sock during BH Rx path, it makes
no sense for its ->recvmsg() to lock the sock. It is always
possible for ->recvmsg() to be called before packets actually
arrive in the receive queue, we just use best effort to make
it accurate here.

Fixes: 698fcd555908 ("udp: Implement udp_bpf_recvmsg() for sockmap")
Signed-off-by: Cong Wang <cong.wang@bytedance.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Acked-by: Jakub Sitnicki <jakub@cloudflare.com>
Link: https://lore.kernel.org/bpf/20210615021342.7416-2-xiyou.wangcong@gmail.com
include/linux/skmsg.h
net/core/skmsg.c
net/ipv4/tcp_bpf.c
net/ipv4/udp_bpf.c