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 PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 26 Oct 2022 11:19:26 +0000 From: <Daniel.Machon@...rochip.com> To: <petrm@...dia.com> CC: <netdev@...r.kernel.org>, <davem@...emloft.net>, <maxime.chevallier@...tlin.com>, <thomas.petazzoni@...tlin.com>, <edumazet@...gle.com>, <kuba@...nel.org>, <pabeni@...hat.com>, <Lars.Povlsen@...rochip.com>, <Steen.Hegelund@...rochip.com>, <UNGLinuxDriver@...rochip.com>, <joe@...ches.com>, <linux@...linux.org.uk>, <Horatiu.Vultur@...rochip.com>, <Julia.Lawall@...ia.fr>, <vladimir.oltean@....com>, <linux-kernel@...r.kernel.org>, <linux-arm-kernel@...ts.infradead.org> Subject: Re: [net-next v3 1/6] net: dcb: add new pcp selector to app object > > Add new PCP selector for the 8021Qaz APP managed object. > > > > As the PCP selector is not part of the 8021Qaz standard, a new non-std > > extension attribute DCB_ATTR_DCB_APP has been introduced. Also two > > helper functions to translate between selector and app attribute type > > has been added. The new selector has been given a value of 255, to > > minimize the risk of future overlap of std- and non-std attributes. > > > > The new DCB_ATTR_DCB_APP is sent alongside the ieee std attribute in the > > app table. This means that the dcb_app struct can now both contain std- > > and non-std app attributes. Currently there is no overlap between the > > selector values of the two attributes. > > > > The purpose of adding the PCP selector, is to be able to offload > > PCP-based queue classification to the 8021Q Priority Code Point table, > > see 6.9.3 of IEEE Std 802.1Q-2018. > > > > PCP and DEI is encoded in the protocol field as 8*dei+pcp, so that a > > mapping of PCP 2 and DEI 1 to priority 3 is encoded as {255, 10, 3}. > > > > Signed-off-by: Daniel Machon <daniel.machon@...rochip.com> > > > static struct sk_buff *dcbnl_newmsg(int type, u8 cmd, u32 port, u32 seq, > > u32 flags, struct nlmsghdr **nlhp) > > { > > @@ -1116,8 +1143,9 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev) > > spin_lock_bh(&dcb_lock); > > list_for_each_entry(itr, &dcb_app_list, list) { > > if (itr->ifindex == netdev->ifindex) { > > - err = nla_put(skb, DCB_ATTR_IEEE_APP, sizeof(itr->app), > > - &itr->app); > > + enum ieee_attrs_app type = > > + dcbnl_app_attr_type_get(itr->app.selector); > > + err = nla_put(skb, type, sizeof(itr->app), &itr->app); > > if (err) { > > spin_unlock_bh(&dcb_lock); > > return -EMSGSIZE; > > @@ -1495,7 +1523,7 @@ static int dcbnl_ieee_set(struct net_device *netdev, struct nlmsghdr *nlh, > > nla_for_each_nested(attr, ieee[DCB_ATTR_IEEE_APP_TABLE], rem) { > > struct dcb_app *app_data; > > > > - if (nla_type(attr) != DCB_ATTR_IEEE_APP) > > + if (!dcbnl_app_attr_type_validate(nla_type(attr))) > > continue; > > > > if (nla_len(attr) < sizeof(struct dcb_app)) { > > @@ -1556,7 +1584,7 @@ static int dcbnl_ieee_del(struct net_device *netdev, struct nlmsghdr *nlh, > > nla_for_each_nested(attr, ieee[DCB_ATTR_IEEE_APP_TABLE], rem) { > > struct dcb_app *app_data; > > > > - if (nla_type(attr) != DCB_ATTR_IEEE_APP) > > + if (!dcbnl_app_attr_type_validate(nla_type(attr))) > > continue; > > app_data = nla_data(attr); > > if (ops->ieee_delapp) > > I'm missing a validation that DCB_APP_SEL_PCP is always sent in > DCB_ATTR_DCB_APP encapsulation. Wouldn't the current code permit > sending it in the IEEE encap? This should be forbidden. Right. Current impl. does not check that the non-std selectors received, are sent with a DCB_ATTR_DCB_APP type. We could introduce a new check dcbnl_app_attr_selector_validate() that checks combination of type and selector, after the type and nla_len(attr) has been checked, so that: validate type -> validate nla_len(attr) -> validate selector > And vice versa: I'm not sure we want to permit sending the standard > attributes in the DCB encap. dcbnl_app_attr_type_get() in dcbnl_ieee_fill() takes care of this. IEEE are always sent in DCB_ATTR_IEEE and non-std are sent in DCB_ATTR_DCB. / Daniel
Powered by blists - more mailing lists