bpf: restore skb->sk before pskb_trim() call
While testing a fix [1] in ___pskb_trim(), addressing the WARN_ON_ONCE() in skb_try_coalesce() reported by Andrey, I found that we had an skb with skb->sk set but no skb->destructor. This invalidated heuristic found in commit158f323b98
("net: adjust skb->truesize in pskb_expand_head()") and in cited patch. Considering the BUG_ON(skb->sk) we have in skb_orphan(), we should restrain the temporary setting to a minimal section. [1] https://patchwork.ozlabs.org/patch/755570/ net: adjust skb->truesize in ___pskb_trim() Fixes:8f917bba00
("bpf: pass sk to helper functions") Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Willem de Bruijn <willemb@google.com> Cc: Andrey Konovalov <andreyknvl@google.com> Acked-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Willem de Bruijn <willemb@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ae3696c167
commit
d1f496fd8f
|
@ -98,8 +98,8 @@ int sk_filter_trim_cap(struct sock *sk, struct sk_buff *skb, unsigned int cap)
|
|||
|
||||
skb->sk = sk;
|
||||
pkt_len = bpf_prog_run_save_cb(filter->prog, skb);
|
||||
err = pkt_len ? pskb_trim(skb, max(cap, pkt_len)) : -EPERM;
|
||||
skb->sk = save_sk;
|
||||
err = pkt_len ? pskb_trim(skb, max(cap, pkt_len)) : -EPERM;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
|
|
Loading…
Reference in New Issue