net: make skb_set_owner_w() more robust
skb_set_owner_w() is called from various places that assume
skb->sk always point to a full blown socket (as it changes
sk->sk_wmem_alloc)
We'd like to attach skb to request sockets, and in the future
to timewait sockets as well. For these kind of pseudo sockets,
we need to take a traditional refcount and use sock_edemux()
as the destructor.
It is now time to un-inline skb_set_owner_w(), being too big.
Fixes: ca6fb06518 ("tcp: attach SYNACK messages to request sockets instead of listener")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Bisected-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
eca1e006cf
commit
9e17f8a475
@@ -2963,9 +2963,7 @@ struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst,
|
||||
skb_reserve(skb, MAX_TCP_HEADER);
|
||||
|
||||
if (attach_req) {
|
||||
skb->destructor = sock_edemux;
|
||||
sock_hold(req_to_sk(req));
|
||||
skb->sk = req_to_sk(req);
|
||||
skb_set_owner_w(skb, req_to_sk(req));
|
||||
} else {
|
||||
/* sk is a const pointer, because we want to express multiple
|
||||
* cpu might call us concurrently.
|
||||
|
||||
Reference in New Issue
Block a user