Message ID | c2be1d959f0d710dbbb99392eeb190a81952307a.1574437486.git.petrm@mellanox.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] net: flow_dissector: Wrap unionized VLAN fields in a struct | expand |
Fri, Nov 22, 2019 at 04:47:21PM CET, petrm@mellanox.com wrote: >In commit a82055af5959 ("netfilter: nft_payload: add VLAN offload >support"), VLAN fields in struct flow_dissector_key_vlan were unionized >with the intention of introducing another field that covered the whole TCI >header. However without a wrapping struct the subfields end up sharing the >same bits. As a result, "tc filter add ... flower vlan_id 14" specifies not >only vlan_id, but also vlan_priority. > >Fix by wrapping the individual VLAN fields in a struct. > >Fixes: a82055af5959 ("netfilter: nft_payload: add VLAN offload support") >Signed-off-by: Petr Machata <petrm@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com>
From: Petr Machata <petrm@mellanox.com> Date: Fri, 22 Nov 2019 15:47:21 +0000 > In commit a82055af5959 ("netfilter: nft_payload: add VLAN offload > support"), VLAN fields in struct flow_dissector_key_vlan were unionized > with the intention of introducing another field that covered the whole TCI > header. However without a wrapping struct the subfields end up sharing the > same bits. As a result, "tc filter add ... flower vlan_id 14" specifies not > only vlan_id, but also vlan_priority. > > Fix by wrapping the individual VLAN fields in a struct. > > Fixes: a82055af5959 ("netfilter: nft_payload: add VLAN offload support") > Signed-off-by: Petr Machata <petrm@mellanox.com> Applied.
diff --git a/include/net/flow_dissector.h b/include/net/flow_dissector.h index f06b0239c32b..b8c20e9f343e 100644 --- a/include/net/flow_dissector.h +++ b/include/net/flow_dissector.h @@ -49,9 +49,11 @@ struct flow_dissector_key_tags { struct flow_dissector_key_vlan { union { - u16 vlan_id:12, - vlan_dei:1, - vlan_priority:3; + struct { + u16 vlan_id:12, + vlan_dei:1, + vlan_priority:3; + }; __be16 vlan_tci; }; __be16 vlan_tpid;
In commit a82055af5959 ("netfilter: nft_payload: add VLAN offload support"), VLAN fields in struct flow_dissector_key_vlan were unionized with the intention of introducing another field that covered the whole TCI header. However without a wrapping struct the subfields end up sharing the same bits. As a result, "tc filter add ... flower vlan_id 14" specifies not only vlan_id, but also vlan_priority. Fix by wrapping the individual VLAN fields in a struct. Fixes: a82055af5959 ("netfilter: nft_payload: add VLAN offload support") Signed-off-by: Petr Machata <petrm@mellanox.com> --- include/net/flow_dissector.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)