diff options
author | Eric Dumazet <edumazet@google.com> | 2015-10-08 05:01:55 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-10-11 05:05:06 -0700 |
commit | e446f9dfe17bbaa76a1fe22912636f38be1e1af8 (patch) | |
tree | 8709e6157fe0a20b75dd88340f76f991cd3ae863 /net | |
parent | 21d11bd6f0f15c9c782d1f09557bb71f582a3f53 (diff) | |
download | op-kernel-dev-e446f9dfe17bbaa76a1fe22912636f38be1e1af8.zip op-kernel-dev-e446f9dfe17bbaa76a1fe22912636f38be1e1af8.tar.gz |
net: synack packets can be attached to request sockets
selinux needs few changes to accommodate fact that SYNACK messages
can be attached to a request socket, lacking sk_security pointer
(Only syncookies are still attached to a TCP_LISTEN socket)
Adds a new sk_listener() helper, and use it in selinux and sch_fq
Fixes: ca6fb0651883 ("tcp: attach SYNACK messages to request sockets instead of listener")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported by: kernel test robot <ying.huang@linux.intel.com>
Cc: Paul Moore <paul@paul-moore.com>
Cc: Stephen Smalley <sds@tycho.nsa.gov>
Cc: Eric Paris <eparis@parisplace.org>
Acked-by: Paul Moore <paul@paul-moore.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/sched/sch_fq.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/sched/sch_fq.c b/net/sched/sch_fq.c index 3386cce..109b232 100644 --- a/net/sched/sch_fq.c +++ b/net/sched/sch_fq.c @@ -225,6 +225,7 @@ static struct fq_flow *fq_classify(struct sk_buff *skb, struct fq_sched_data *q) return &q->internal; /* SYNACK messages are attached to a TCP_NEW_SYN_RECV request socket + * or a listener (SYNCOOKIE mode) * 1) request sockets are not full blown, * they do not contain sk_pacing_rate * 2) They are not part of a 'flow' yet @@ -232,7 +233,7 @@ static struct fq_flow *fq_classify(struct sk_buff *skb, struct fq_sched_data *q) * especially if the listener set SO_MAX_PACING_RATE * 4) We pretend they are orphaned */ - if (!sk || sk->sk_state == TCP_NEW_SYN_RECV) { + if (!sk || sk_listener(sk)) { unsigned long hash = skb_get_hash(skb) & q->orphan_mask; /* By forcing low order bit to 1, we make sure to not |