https://github.com/torvalds/linux
Revision 2c7269b231194aae23fb90ab65842573a91acbc9 authored by Sabrina Dubroca on 10 June 2020, 10:19:43 UTC, committed by Alexei Starovoitov on 12 June 2020, 22:10:12 UTC
If the peer is closed, we will never get more data, so tcp_bpf_wait_data will get stuck forever. In case we passed MSG_DONTWAIT to recv(), we get EAGAIN but we should actually get 0. >From man 2 recv: RETURN VALUE When a stream socket peer has performed an orderly shutdown, the return value will be 0 (the traditional "end-of-file" return). This patch makes tcp_bpf_wait_data always return 1 when the peer socket has been shutdown. Either we have data available, and it would have returned 1 anyway, or there isn't, in which case we'll call tcp_recvmsg which does the right thing in this situation. Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface") Signed-off-by: Sabrina Dubroca <sd@queasysnail.net> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Jakub Sitnicki <jakub@cloudflare.com> Link: https://lore.kernel.org/bpf/26038a28c21fea5d04d4bd4744c5686d3f2e5504.1591784177.git.sd@queasysnail.net
1 parent 2c4779e
Tip revision: 2c7269b231194aae23fb90ab65842573a91acbc9 authored by Sabrina Dubroca on 10 June 2020, 10:19:43 UTC
bpf: tcp: Recv() should return 0 when the peer socket is closed
bpf: tcp: Recv() should return 0 when the peer socket is closed
Tip revision: 2c7269b
File | Mode | Size |
---|---|---|
6lowpan | ||
802 | ||
8021q | ||
9p | ||
appletalk | ||
atm | ||
ax25 | ||
batman-adv | ||
bluetooth | ||
bpf | ||
bpfilter | ||
bridge | ||
caif | ||
can | ||
ceph | ||
core | ||
dcb | ||
dccp | ||
decnet | ||
dns_resolver | ||
dsa | ||
ethernet | ||
ethtool | ||
hsr | ||
ieee802154 | ||
ife | ||
ipv4 | ||
ipv6 | ||
iucv | ||
kcm | ||
key | ||
l2tp | ||
l3mdev | ||
lapb | ||
llc | ||
mac80211 | ||
mac802154 | ||
mpls | ||
mptcp | ||
ncsi | ||
netfilter | ||
netlabel | ||
netlink | ||
netrom | ||
nfc | ||
nsh | ||
openvswitch | ||
packet | ||
phonet | ||
psample | ||
qrtr | ||
rds | ||
rfkill | ||
rose | ||
rxrpc | ||
sched | ||
sctp | ||
smc | ||
strparser | ||
sunrpc | ||
switchdev | ||
tipc | ||
tls | ||
unix | ||
vmw_vsock | ||
wimax | ||
wireless | ||
x25 | ||
xdp | ||
xfrm | ||
Kconfig | -rw-r--r-- | 14.1 KB |
Makefile | -rw-r--r-- | 2.6 KB |
compat.c | -rw-r--r-- | 17.3 KB |
devres.c | -rw-r--r-- | 2.2 KB |
socket.c | -rw-r--r-- | 91.4 KB |
sysctl_net.c | -rw-r--r-- | 3.0 KB |
Computing file changes ...