diff options
author | Eric Dumazet <edumazet@google.com> | 2015-11-08 13:54:10 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-11-08 20:56:39 -0500 |
commit | 743b2a66744635b6d91e3d9da1fff29ad5ceb456 (patch) | |
tree | cdf035dfa9564f62e13d3bc76fb6d6378f895301 /net/sched | |
parent | fdd723e2a856b6132d5e7beb2a2d3ec1e6a6297f (diff) |
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>
Diffstat (limited to 'net/sched')
-rw-r--r-- | net/sched/cls_flow.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/net/sched/cls_flow.c b/net/sched/cls_flow.c index 536838b657bf..fbfec6a18839 100644 --- a/net/sched/cls_flow.c +++ b/net/sched/cls_flow.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/if_vlan.h> | 22 | #include <linux/if_vlan.h> |
23 | #include <linux/slab.h> | 23 | #include <linux/slab.h> |
24 | #include <linux/module.h> | 24 | #include <linux/module.h> |
25 | #include <net/inet_sock.h> | ||
25 | 26 | ||
26 | #include <net/pkt_cls.h> | 27 | #include <net/pkt_cls.h> |
27 | #include <net/ip.h> | 28 | #include <net/ip.h> |
@@ -197,8 +198,11 @@ static u32 flow_get_rtclassid(const struct sk_buff *skb) | |||
197 | 198 | ||
198 | static u32 flow_get_skuid(const struct sk_buff *skb) | 199 | static u32 flow_get_skuid(const struct sk_buff *skb) |
199 | { | 200 | { |
200 | if (skb->sk && skb->sk->sk_socket && skb->sk->sk_socket->file) { | 201 | struct sock *sk = skb_to_full_sk(skb); |
201 | kuid_t skuid = skb->sk->sk_socket->file->f_cred->fsuid; | 202 | |
203 | if (sk && sk->sk_socket && sk->sk_socket->file) { | ||
204 | kuid_t skuid = sk->sk_socket->file->f_cred->fsuid; | ||
205 | |||
202 | return from_kuid(&init_user_ns, skuid); | 206 | return from_kuid(&init_user_ns, skuid); |
203 | } | 207 | } |
204 | return 0; | 208 | return 0; |
@@ -206,8 +210,11 @@ static u32 flow_get_skuid(const struct sk_buff *skb) | |||
206 | 210 | ||
207 | static u32 flow_get_skgid(const struct sk_buff *skb) | 211 | static u32 flow_get_skgid(const struct sk_buff *skb) |
208 | { | 212 | { |
209 | if (skb->sk && skb->sk->sk_socket && skb->sk->sk_socket->file) { | 213 | struct sock *sk = skb_to_full_sk(skb); |
210 | kgid_t skgid = skb->sk->sk_socket->file->f_cred->fsgid; | 214 | |
215 | if (sk && sk->sk_socket && sk->sk_socket->file) { | ||
216 | kgid_t skgid = sk->sk_socket->file->f_cred->fsgid; | ||
217 | |||
211 | return from_kgid(&init_user_ns, skgid); | 218 | return from_kgid(&init_user_ns, skgid); |
212 | } | 219 | } |
213 | return 0; | 220 | return 0; |