diff options
Diffstat (limited to 'net/ipv4/tcp_bpf.c')
| -rw-r--r-- | net/ipv4/tcp_bpf.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c index 2e234d155b5e..338c5d90e550 100644 --- a/net/ipv4/tcp_bpf.c +++ b/net/ipv4/tcp_bpf.c @@ -286,10 +286,9 @@ msg_bytes_ready: if (sock_flag(sk, SOCK_DONE)) goto out; - if (sk->sk_err) { - copied = sock_error(sk); + copied = sock_error(sk); + if (copied) goto out; - } if (sk->sk_shutdown & RCV_SHUTDOWN) goto out; @@ -553,10 +552,9 @@ static int tcp_bpf_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) bool enospc = false; u32 copy, osize; - if (sk->sk_err) { - err = -sk->sk_err; + err = -READ_ONCE(sk->sk_err); + if (err) goto out_err; - } copy = msg_data_left(msg); if (!sk_stream_memory_free(sk)) |
