mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 13:30:45 -05:00
net: add skb_set_owner_edemux() helper
This can be used to attach a socket to an skb, taking a reference on sk->sk_refcnt. This helper might be a NOP if sk->sk_refcnt is zero. Use it from tcp_make_synack(). Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com> Reviewed-by: Brian Vazquez <brianvv@google.com> Link: https://patch.msgid.link/20241010174817.1543642-4-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
bc43a3c83c
commit
5ced52fa8f
@@ -1760,6 +1760,15 @@ void sock_efree(struct sk_buff *skb);
|
||||
#ifdef CONFIG_INET
|
||||
void sock_edemux(struct sk_buff *skb);
|
||||
void sock_pfree(struct sk_buff *skb);
|
||||
|
||||
static inline void skb_set_owner_edemux(struct sk_buff *skb, struct sock *sk)
|
||||
{
|
||||
skb_orphan(skb);
|
||||
if (refcount_inc_not_zero(&sk->sk_refcnt)) {
|
||||
skb->sk = sk;
|
||||
skb->destructor = sock_edemux;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define sock_edemux sock_efree
|
||||
#endif
|
||||
|
||||
@@ -2592,14 +2592,11 @@ void __sock_wfree(struct sk_buff *skb)
|
||||
void skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
|
||||
{
|
||||
skb_orphan(skb);
|
||||
skb->sk = sk;
|
||||
#ifdef CONFIG_INET
|
||||
if (unlikely(!sk_fullsock(sk))) {
|
||||
skb->destructor = sock_edemux;
|
||||
sock_hold(sk);
|
||||
return;
|
||||
}
|
||||
if (unlikely(!sk_fullsock(sk)))
|
||||
return skb_set_owner_edemux(skb, sk);
|
||||
#endif
|
||||
skb->sk = sk;
|
||||
skb->destructor = sock_wfree;
|
||||
skb_set_hash_from_sk(skb, sk);
|
||||
/*
|
||||
|
||||
@@ -3728,7 +3728,7 @@ struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst,
|
||||
|
||||
switch (synack_type) {
|
||||
case TCP_SYNACK_NORMAL:
|
||||
skb_set_owner_w(skb, req_to_sk(req));
|
||||
skb_set_owner_edemux(skb, req_to_sk(req));
|
||||
break;
|
||||
case TCP_SYNACK_COOKIE:
|
||||
/* Under synflood, we do not attach skb to a socket,
|
||||
|
||||
Reference in New Issue
Block a user