All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] flower: check unused bits in MPLS fields
@ 2017-05-01 13:58 Benjamin LaHaise
  2017-05-02  1:37 ` Jamal Hadi Salim
  0 siblings, 1 reply; 3+ messages in thread
From: Benjamin LaHaise @ 2017-05-01 13:58 UTC (permalink / raw)
  To: netdev
  Cc: Benjamin LaHaise, David Miller, Jamal Hadi Salim, Simon Horman,
	Jakub Kicinski, Jiri Pirko

Since several of the the netlink attributes used to configure the flower
classifier's MPLS TC, BOS and Label fields have additional bits which are
unused, check those bits to ensure that they are actually 0 as suggested
by Jamal.

Signed-off-by: Benjamin LaHaise <benjamin.lahaise@netronome.com>
Cc: David Miller <davem@davemloft.net>
Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Cc: Simon Horman <simon.horman@netronome.com>
Cc: Jakub Kicinski <kubakici@wp.pl>
Cc: Jiri Pirko <jiri@resnulli.us>
---
 net/sched/cls_flower.c | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
index 3ecf076..ca526c0 100644
--- a/net/sched/cls_flower.c
+++ b/net/sched/cls_flower.c
@@ -439,29 +439,39 @@ static void fl_set_key_val(struct nlattr **tb,
 		memcpy(mask, nla_data(tb[mask_type]), len);
 }
 
-static void fl_set_key_mpls(struct nlattr **tb,
-			    struct flow_dissector_key_mpls *key_val,
-			    struct flow_dissector_key_mpls *key_mask)
+static int fl_set_key_mpls(struct nlattr **tb,
+			   struct flow_dissector_key_mpls *key_val,
+			   struct flow_dissector_key_mpls *key_mask)
 {
 	if (tb[TCA_FLOWER_KEY_MPLS_TTL]) {
 		key_val->mpls_ttl = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_TTL]);
 		key_mask->mpls_ttl = MPLS_TTL_MASK;
 	}
 	if (tb[TCA_FLOWER_KEY_MPLS_BOS]) {
-		key_val->mpls_bos = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_BOS]);
+		u8 bos = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_BOS]);
+
+		if (bos & ~MPLS_BOS_MASK)
+			return -EINVAL;
+		key_val->mpls_bos = bos;
 		key_mask->mpls_bos = MPLS_BOS_MASK;
 	}
 	if (tb[TCA_FLOWER_KEY_MPLS_TC]) {
-		key_val->mpls_tc =
-			nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_TC]) & MPLS_TC_MASK;
+		u8 tc = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_TC]);
+
+		if (tc & ~MPLS_TC_MASK)
+			return -EINVAL;
+		key_val->mpls_tc = tc;
 		key_mask->mpls_tc = MPLS_TC_MASK;
 	}
 	if (tb[TCA_FLOWER_KEY_MPLS_LABEL]) {
-		key_val->mpls_label =
-			nla_get_u32(tb[TCA_FLOWER_KEY_MPLS_LABEL]) &
-			MPLS_LABEL_MASK;
+		u32 label = nla_get_u32(tb[TCA_FLOWER_KEY_MPLS_LABEL]);
+
+		if (label & ~MPLS_LABEL_MASK)
+			return -EINVAL;
+		key_val->mpls_label = label;
 		key_mask->mpls_label = MPLS_LABEL_MASK;
 	}
+	return 0;
 }
 
 static void fl_set_key_vlan(struct nlattr **tb,
@@ -622,7 +632,9 @@ static int fl_set_key(struct net *net, struct nlattr **tb,
 			       sizeof(key->icmp.code));
 	} else if (key->basic.n_proto == htons(ETH_P_MPLS_UC) ||
 		   key->basic.n_proto == htons(ETH_P_MPLS_MC)) {
-		fl_set_key_mpls(tb, &key->mpls, &mask->mpls);
+		ret = fl_set_key_mpls(tb, &key->mpls, &mask->mpls);
+		if (ret)
+			return ret;
 	} else if (key->basic.n_proto == htons(ETH_P_ARP) ||
 		   key->basic.n_proto == htons(ETH_P_RARP)) {
 		fl_set_key_val(tb, &key->arp.sip, TCA_FLOWER_KEY_ARP_SIP,
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] flower: check unused bits in MPLS fields
  2017-05-01 13:58 [PATCH] flower: check unused bits in MPLS fields Benjamin LaHaise
@ 2017-05-02  1:37 ` Jamal Hadi Salim
  2017-05-02 11:44   ` Simon Horman
  0 siblings, 1 reply; 3+ messages in thread
From: Jamal Hadi Salim @ 2017-05-02  1:37 UTC (permalink / raw)
  To: Benjamin LaHaise, netdev
  Cc: David Miller, Simon Horman, Jakub Kicinski, Jiri Pirko

On 17-05-01 09:58 AM, Benjamin LaHaise wrote:
> Since several of the the netlink attributes used to configure the flower
> classifier's MPLS TC, BOS and Label fields have additional bits which are
> unused, check those bits to ensure that they are actually 0 as suggested
> by Jamal.
>
> Signed-off-by: Benjamin LaHaise <benjamin.lahaise@netronome.com>
> Cc: David Miller <davem@davemloft.net>
> Cc: Jamal Hadi Salim <jhs@mojatatu.com>
> Cc: Simon Horman <simon.horman@netronome.com>
> Cc: Jakub Kicinski <kubakici@wp.pl>
> Cc: Jiri Pirko <jiri@resnulli.us>

Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>

cheers,
jamal

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] flower: check unused bits in MPLS fields
  2017-05-02  1:37 ` Jamal Hadi Salim
@ 2017-05-02 11:44   ` Simon Horman
  0 siblings, 0 replies; 3+ messages in thread
From: Simon Horman @ 2017-05-02 11:44 UTC (permalink / raw)
  To: Jamal Hadi Salim
  Cc: Benjamin LaHaise, netdev, David Miller, Jakub Kicinski, Jiri Pirko

On Mon, May 01, 2017 at 09:37:00PM -0400, Jamal Hadi Salim wrote:
> On 17-05-01 09:58 AM, Benjamin LaHaise wrote:
> >Since several of the the netlink attributes used to configure the flower
> >classifier's MPLS TC, BOS and Label fields have additional bits which are
> >unused, check those bits to ensure that they are actually 0 as suggested
> >by Jamal.
> >
> >Signed-off-by: Benjamin LaHaise <benjamin.lahaise@netronome.com>
> >Cc: David Miller <davem@davemloft.net>
> >Cc: Jamal Hadi Salim <jhs@mojatatu.com>
> >Cc: Simon Horman <simon.horman@netronome.com>
> >Cc: Jakub Kicinski <kubakici@wp.pl>
> >Cc: Jiri Pirko <jiri@resnulli.us>
> 
> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>

Reviewed-by: Simon Horman <simon.horman@netronome.com>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-05-02 11:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-01 13:58 [PATCH] flower: check unused bits in MPLS fields Benjamin LaHaise
2017-05-02  1:37 ` Jamal Hadi Salim
2017-05-02 11:44   ` Simon Horman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.