Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: move sk_validate_xmit_skb() to net/core/dev.c

Move definition of sk_validate_xmit_skb() from net/core/sock.c to
net/core/dev.c.

This change is in preparation of the next patch, where
sk_validate_xmit_skb() will need to cast sk to a tcp_timewait_sock *,
and access member fields. Including linux/tcp.h from linux/sock.h
creates a circular dependency, and dev.c is the only current call site
of this function.

Reviewed-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20250917000954.859376-7-daniel.zahka@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

Daniel Zahka and committed by
Paolo Abeni
8c511c1d 117f02a4

+22 -22
-22
include/net/sock.h
··· 2960 2960 return sk && sk_fullsock(sk) && sock_flag(sk, SOCK_WIFI_STATUS); 2961 2961 } 2962 2962 2963 - /* Checks if this SKB belongs to an HW offloaded socket 2964 - * and whether any SW fallbacks are required based on dev. 2965 - * Check decrypted mark in case skb_orphan() cleared socket. 2966 - */ 2967 - static inline struct sk_buff *sk_validate_xmit_skb(struct sk_buff *skb, 2968 - struct net_device *dev) 2969 - { 2970 - #ifdef CONFIG_SOCK_VALIDATE_XMIT 2971 - struct sock *sk = skb->sk; 2972 - 2973 - if (sk && sk_fullsock(sk) && sk->sk_validate_xmit_skb) { 2974 - skb = sk->sk_validate_xmit_skb(sk, dev, skb); 2975 - } else if (unlikely(skb_is_decrypted(skb))) { 2976 - pr_warn_ratelimited("unencrypted skb with no associated socket - dropping\n"); 2977 - kfree_skb(skb); 2978 - skb = NULL; 2979 - } 2980 - #endif 2981 - 2982 - return skb; 2983 - } 2984 - 2985 2963 /* This helper checks if a socket is a LISTEN or NEW_SYN_RECV 2986 2964 * SYNACK messages can be attached to either ones (depending on SYNCOOKIE) 2987 2965 */
+22
net/core/dev.c
··· 3907 3907 } 3908 3908 EXPORT_SYMBOL(skb_csum_hwoffload_help); 3909 3909 3910 + /* Checks if this SKB belongs to an HW offloaded socket 3911 + * and whether any SW fallbacks are required based on dev. 3912 + * Check decrypted mark in case skb_orphan() cleared socket. 3913 + */ 3914 + static struct sk_buff *sk_validate_xmit_skb(struct sk_buff *skb, 3915 + struct net_device *dev) 3916 + { 3917 + #ifdef CONFIG_SOCK_VALIDATE_XMIT 3918 + struct sock *sk = skb->sk; 3919 + 3920 + if (sk && sk_fullsock(sk) && sk->sk_validate_xmit_skb) { 3921 + skb = sk->sk_validate_xmit_skb(sk, dev, skb); 3922 + } else if (unlikely(skb_is_decrypted(skb))) { 3923 + pr_warn_ratelimited("unencrypted skb with no associated socket - dropping\n"); 3924 + kfree_skb(skb); 3925 + skb = NULL; 3926 + } 3927 + #endif 3928 + 3929 + return skb; 3930 + } 3931 + 3910 3932 static struct sk_buff *validate_xmit_unreadable_skb(struct sk_buff *skb, 3911 3933 struct net_device *dev) 3912 3934 {