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
| ||
|
Date: Tue, 20 Jun 2017 13:17:38 +0300 From: Sergei Shtylyov <sergei.shtylyov@...entembedded.com> To: John Crispin <john@...ozen.org>, Andrew Lunn <andrew@...n.ch>, Vivien Didelot <vivien.didelot@...oirfairelinux.com>, Florian Fainelli <f.fainelli@...il.com>, "David S . Miller" <davem@...emloft.net>, Sean Wang <sean.wang@...iatek.com> Cc: netdev@...r.kernel.org Subject: Re: [RFC 1/2] net-next: fix DSA flow_disection Hello! On 6/20/2017 11:06 AM, John Crispin wrote: > RPS and probably other kernel features are currently broken on some if not > all DSA devices. The root cause of this that skb_hash will call the "Is" missing between "this" and "that"? > flow_disector. At this point the skb still contains the magic switch header Dissector? > and the skb->protocol field is not set up to the correct 802.3 value yet. > by the time the tag specific code is called, removing the header and > properly setting the protocol an invalid hash is already set. In the case > of the mt7530 this will result in all flows always having the same hash. > > The patch adds 2 new fields to the dsa_switch_ops allowing the > flow_disector to use them in order to be able to create the real hash of Again. > the connection. > > Signed-off-by: John Crispin <john@...ozen.org> [...] > diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c > index fc5fc4594c90..da45bdf57408 100644 > --- a/net/core/flow_dissector.c > +++ b/net/core/flow_dissector.c [...] > @@ -440,6 +441,17 @@ bool __skb_flow_dissect(const struct sk_buff *skb, > skb->vlan_proto : skb->protocol; > nhoff = skb_network_offset(skb); > hlen = skb_headlen(skb); > + > + if (unlikely(netdev_uses_dsa(skb->dev))) { > + const struct dsa_switch_ops *ops; > + u8 *p = (u8 *) data; Didn't checkpatch.pl complain about space after (u8 *)? > + > + ops = skb->dev->dsa_ptr->ds[0]->ops; > + if (ops->hash_proto_off) > + proto = (u16) p[ops->hash_proto_off]; Again, didn't it? [...] MBR, Sergei
Powered by blists - more mailing lists