summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Fastabend <john.fastabend@gmail.com>2018-10-29 20:31:28 +0100
committerDaniel Borkmann <daniel@iogearbox.net>2018-10-30 23:31:22 +0100
commit27b31e68bc9fc25c519c7772fa23913687218d5f (patch)
treeefc8ca26473eb98d494b0ad3c01af4d5a54050f8
parenttools/bpf: add unlimited rlimit for flow_dissector_load (diff)
downloadlinux-27b31e68bc9fc25c519c7772fa23913687218d5f.tar.xz
linux-27b31e68bc9fc25c519c7772fa23913687218d5f.zip
bpf: tcp_bpf_recvmsg should return EAGAIN when nonblocking and no data
We return 0 in the case of a nonblocking socket that has no data available. However, this is incorrect and may confuse applications. After this patch we do the correct thing and return the error EAGAIN. Quoting return codes from recvmsg manpage, EAGAIN or EWOULDBLOCK The socket is marked nonblocking and the receive operation would block, or a receive timeout had been set and the timeout expired before data was received. Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface") Signed-off-by: John Fastabend <john.fastabend@gmail.com> Acked-by: Song Liu <songliubraving@fb.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
-rw-r--r--net/ipv4/tcp_bpf.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c
index b7918d4caa30..3b45fe530f91 100644
--- a/net/ipv4/tcp_bpf.c
+++ b/net/ipv4/tcp_bpf.c
@@ -145,6 +145,7 @@ msg_bytes_ready:
ret = err;
goto out;
}
+ copied = -EAGAIN;
}
ret = copied;
out: