diff options
author | David S. Miller <davem@davemloft.net> | 2017-10-30 01:10:01 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-10-30 08:09:24 -0400 |
commit | e1ea2f9856b765a2eaabb403a6751f70efc9ba4c (patch) | |
tree | 771f0f96fdab1b27757730e96d911c73f5499ee4 /kernel/bpf/sockmap.c | |
parent | aad93c70b9a3b80dbc383a31e77a119f69bdd856 (diff) | |
parent | 0b07194bb55ed836c2cc7c22e866b87a14681984 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Several conflicts here.
NFP driver bug fix adding nfp_netdev_is_nfp_repr() check to
nfp_fl_output() needed some adjustments because the code block is in
an else block now.
Parallel additions to net/pkt_cls.h and net/sch_generic.h
A bug fix in __tcp_retransmit_skb() conflicted with some of
the rbtree changes in net-next.
The tc action RCU callback fixes in 'net' had some overlap with some
of the recent tcf_block reworking.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/bpf/sockmap.c')
-rw-r--r-- | kernel/bpf/sockmap.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/kernel/bpf/sockmap.c b/kernel/bpf/sockmap.c index eef843c3b419..de8f66cad882 100644 --- a/kernel/bpf/sockmap.c +++ b/kernel/bpf/sockmap.c | |||
@@ -96,6 +96,14 @@ static inline struct smap_psock *smap_psock_sk(const struct sock *sk) | |||
96 | return rcu_dereference_sk_user_data(sk); | 96 | return rcu_dereference_sk_user_data(sk); |
97 | } | 97 | } |
98 | 98 | ||
99 | /* compute the linear packet data range [data, data_end) for skb when | ||
100 | * sk_skb type programs are in use. | ||
101 | */ | ||
102 | static inline void bpf_compute_data_end_sk_skb(struct sk_buff *skb) | ||
103 | { | ||
104 | TCP_SKB_CB(skb)->bpf.data_end = skb->data + skb_headlen(skb); | ||
105 | } | ||
106 | |||
99 | static int smap_verdict_func(struct smap_psock *psock, struct sk_buff *skb) | 107 | static int smap_verdict_func(struct smap_psock *psock, struct sk_buff *skb) |
100 | { | 108 | { |
101 | struct bpf_prog *prog = READ_ONCE(psock->bpf_verdict); | 109 | struct bpf_prog *prog = READ_ONCE(psock->bpf_verdict); |
@@ -117,7 +125,8 @@ static int smap_verdict_func(struct smap_psock *psock, struct sk_buff *skb) | |||
117 | preempt_enable(); | 125 | preempt_enable(); |
118 | skb->sk = NULL; | 126 | skb->sk = NULL; |
119 | 127 | ||
120 | return rc; | 128 | return rc == SK_PASS ? |
129 | (TCP_SKB_CB(skb)->bpf.map ? SK_REDIRECT : SK_PASS) : SK_DROP; | ||
121 | } | 130 | } |
122 | 131 | ||
123 | static void smap_do_verdict(struct smap_psock *psock, struct sk_buff *skb) | 132 | static void smap_do_verdict(struct smap_psock *psock, struct sk_buff *skb) |