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

sched: cls_flow: use skb_to_full_sk() helper

SYNACK packets might be attached to request sockets.

Fixes: ca6fb0651883 ("tcp: attach SYNACK messages to request sockets instead of listener")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Eric Dumazet and committed by
David S. Miller
743b2a66 fdd723e2

+11 -4
+11 -4
net/sched/cls_flow.c
··· 22 22 #include <linux/if_vlan.h> 23 23 #include <linux/slab.h> 24 24 #include <linux/module.h> 25 + #include <net/inet_sock.h> 25 26 26 27 #include <net/pkt_cls.h> 27 28 #include <net/ip.h> ··· 198 197 199 198 static u32 flow_get_skuid(const struct sk_buff *skb) 200 199 { 201 - if (skb->sk && skb->sk->sk_socket && skb->sk->sk_socket->file) { 202 - kuid_t skuid = skb->sk->sk_socket->file->f_cred->fsuid; 200 + struct sock *sk = skb_to_full_sk(skb); 201 + 202 + if (sk && sk->sk_socket && sk->sk_socket->file) { 203 + kuid_t skuid = sk->sk_socket->file->f_cred->fsuid; 204 + 203 205 return from_kuid(&init_user_ns, skuid); 204 206 } 205 207 return 0; ··· 210 206 211 207 static u32 flow_get_skgid(const struct sk_buff *skb) 212 208 { 213 - if (skb->sk && skb->sk->sk_socket && skb->sk->sk_socket->file) { 214 - kgid_t skgid = skb->sk->sk_socket->file->f_cred->fsgid; 209 + struct sock *sk = skb_to_full_sk(skb); 210 + 211 + if (sk && sk->sk_socket && sk->sk_socket->file) { 212 + kgid_t skgid = sk->sk_socket->file->f_cred->fsgid; 213 + 215 214 return from_kgid(&init_user_ns, skgid); 216 215 } 217 216 return 0;