--- y/net/ipv4/tcp.c +++ t/net/ipv4/tcp.c @@ -1751,6 +1751,7 @@ int tcp_read_skb(struct sock *sk, skb_re __skb_unlink(skb, &sk->sk_receive_queue); used = recv_actor(sk, skb); if (used <= 0) { + consume_skb(skb); if (!copied) copied = used; break; @@ -1764,7 +1765,6 @@ int tcp_read_skb(struct sock *sk, skb_re break; } consume_skb(skb); - break; } WRITE_ONCE(tp->copied_seq, seq); --- y/net/core/sock_map.c +++ s/net/core/sock_map.c @@ -1578,7 +1578,7 @@ void sock_map_destroy(struct sock *sk) saved_destroy = psock->saved_destroy; sock_map_remove_links(sk, psock); rcu_read_unlock(); - sk_psock_stop(psock, true); + sk_psock_stop(psock, false); sk_psock_put(sk, psock); saved_destroy(sk); }