lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <CAF=yD-LO6o=uZ-aT-J9uPiBcO4f2Zc9uyGZ+f7M7mPtRSB44gA@mail.gmail.com> Date: Mon, 13 May 2019 16:33:06 -0400 From: Willem de Bruijn <willemdebruijn.kernel@...il.com> To: Stanislav Fomichev <sdf@...gle.com> Cc: Network Development <netdev@...r.kernel.org>, bpf <bpf@...r.kernel.org>, David Miller <davem@...emloft.net>, Alexei Starovoitov <ast@...nel.org>, Daniel Borkmann <daniel@...earbox.net>, Willem de Bruijn <willemb@...gle.com>, Petar Penkov <ppenkov@...gle.com> Subject: Re: [PATCH bpf 1/2] flow_dissector: support FLOW_DISSECTOR_KEY_ETH_ADDRS with BPF On Mon, May 13, 2019 at 3:53 PM Stanislav Fomichev <sdf@...gle.com> wrote: > > If we have a flow dissector BPF program attached to the namespace, > FLOW_DISSECTOR_KEY_ETH_ADDRS won't trigger because we exit early. I suppose that this is true for a variety of keys? For instance, also FLOW_DISSECTOR_KEY_IPV4_ADDRS. We originally intended BPF flow dissection for all paths except tc_flower. As that catches all the vulnerable cases on the ingress path on the one hand and it is infeasible to support all the flower features, now and future. I think that is the real fix. > > Handle FLOW_DISSECTOR_KEY_ETH_ADDRS before BPF and only if we have > an skb (used by tc-flower only). > > Fixes: d58e468b1112 ("flow_dissector: implements flow dissector BPF hook") > Signed-off-by: Stanislav Fomichev <sdf@...gle.com> > --- > net/core/flow_dissector.c | 23 ++++++++++++----------- > 1 file changed, 12 insertions(+), 11 deletions(-) > > diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c > index 9ca784c592ac..ba76d9168c8b 100644 > --- a/net/core/flow_dissector.c > +++ b/net/core/flow_dissector.c > @@ -825,6 +825,18 @@ bool __skb_flow_dissect(const struct net *net, > else if (skb->sk) > net = sock_net(skb->sk); > } > + > + if (dissector_uses_key(flow_dissector, > + FLOW_DISSECTOR_KEY_ETH_ADDRS)) { > + struct ethhdr *eth = eth_hdr(skb); Here as well as in the original patch: is it safe to just cast to eth_hdr? In the same file, __skb_flow_dissect_gre does test for (encapsulated) protocol first.
Powered by blists - more mailing lists