Skip to contentSkip to conversation

net_sched: reject unknown tcfa_action values

PATCH In review Paolo Abeni 3 participants 5 messages Aug 29, 2018 – Aug 30, 2018

Subsystems (4)
lore
Share & tools
lore

Paolo Abeni

author maintainer
#0 lore raw

v2 cover net_sched: reject unknown tcfa_action values

As agreed some time ago, this changeset reject unknown tcfa_action values, instead of changing such values under the hood.

A tdc test is included to verify the new behavior.

v1 -> v2:
- helper is now static and renamed according to act_* convention
- updated extack message, according to the new behavior

Paolo Abeni (2):
net_sched: reject unknown tcfa_action values
tc-testing: add test-cases for numeric and invalid control action

 net/sched/act_api.c                           | 16 +++++--
 .../tc-testing/tc-tests/actions/police.json   | 48 +++++++++++++++++++
 2 files changed, 59 insertions(+), 5 deletions(-)
Signature · 1 line
2.17.1
author maintainer
#1 lore raw

PATCH v2 1/2 net_sched: reject unknown tcfa_action values

After the commit 802bfb19152c ("net/sched: user-space can't set unknown tcfa_action values"), unknown tcfa_action values are converted to TC_ACT_UNSPEC, but the common agreement is instead rejecting such configurations.

This change also introduces a helper to simplify the destruction of a single action, avoiding code duplication.

v1 -> v2:
- helper is now static and renamed according to act_* convention
- updated extack message, according to the new behavior

Fixes 802bfb19152c ("net/sched: user-space can't set unknown tcfa_action values")
---
 net/sched/act_api.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)
net/sched/act_api.c +11 -5
index db83dac1e7f4..316c98bb87e4 100644
@@ -662,6 +662,13 @@ int tcf_action_destroy(struct tc_action *actions[], int bind)
 	return ret;
 }
 
+static int tcf_action_destroy_1(struct tc_action *a, int bind)
+{
+	struct tc_action *actions[] = { a, NULL };
+
+	return tcf_action_destroy(actions, bind);
+}
+
 static int tcf_action_put(struct tc_action *p)
 {
 	return __tcf_action_put(p, false);
@@ -881,17 +888,16 @@ struct tc_action *tcf_action_init_1(struct net *net, struct tcf_proto *tp,
 	if (TC_ACT_EXT_CMP(a->tcfa_action, TC_ACT_GOTO_CHAIN)) {
 		err = tcf_action_goto_chain_init(a, tp);
 		if (err) {
-			struct tc_action *actions[] = { a, NULL };
-
-			tcf_action_destroy(actions, bind);
+			tcf_action_destroy_1(a, bind);
 			NL_SET_ERR_MSG(extack, "Failed to init TC action chain");
 			return ERR_PTR(err);
 		}
 	}
 
 	if (!tcf_action_valid(a->tcfa_action)) {
-		NL_SET_ERR_MSG(extack, "invalid action value, using TC_ACT_UNSPEC instead");
-		a->tcfa_action = TC_ACT_UNSPEC;
+		tcf_action_destroy_1(a, bind);
+		NL_SET_ERR_MSG(extack, "Invalid control action value");
+		return ERR_PTR(-EINVAL);
 	}
 
 	return a;
Signature · 1 line
2.17.1
maintainer Acked-by on v2 1/2
#2 lore raw
Quoted 8 lines · Wed, Aug 29, 2018 at 10:22:33AM CEST, [email protected] wrote:

After the commit 802bfb19152c ("net/sched: user-space can't set unknown tcfa_action values"), unknown tcfa_action values are converted to TC_ACT_UNSPEC, but the common agreement is instead rejecting such configurations.

This change also introduces a helper to simplify the destruction of a single action, avoiding code duplication.

Quoted 6 lines

v1 -> v2:
- helper is now static and renamed according to act_* convention
- updated extack message, according to the new behavior

Fixes 802bfb19152c ("net/sched: user-space can't set unknown tcfa_action values")
author maintainer
#3 lore raw

PATCH v2 2/2 tc-testing: add test-cases for numeric and invalid control action

In reply to Paolo Abeni

Only the police action allows us to specify an arbitrary numeric value for the control action. This change introduces an explicit test case for the above feature and then leverage it for testing the kernel behavior for invalid control actions (reject).

---
 .../tc-testing/tc-tests/actions/police.json   | 48 +++++++++++++++++++
 1 file changed, 48 insertions(+)
tools/testing/selftests/tc-testing/tc-tests/actions/police.json +48 -0
index f03763d81617..30f9b54bd666 100644
@@ -312,6 +312,54 @@
             "$TC actions flush action police"
         ]
     },
+    {
+        "id": "6aaf",
+        "name": "Add police actions with conform-exceed control pass/pipe [with numeric values]",
+        "category": [
+            "actions",
+            "police"
+        ],
+        "setup": [
+            [
+                "$TC actions flush action police",
+                0,
+                1,
+                255
+            ]
+        ],
+        "cmdUnderTest": "$TC actions add action police rate 3mbit burst 250k conform-exceed 0/3 index 1",
+        "expExitCode": "0",
+        "verifyCmd": "$TC actions get action police index 1",
+        "matchPattern": "action order [0-9]*:  police 0x1 rate 3Mbit burst 250Kb mtu 2Kb action pass/pipe",
+        "matchCount": "1",
+        "teardown": [
+            "$TC actions flush action police"
+        ]
+    },
+    {
+        "id": "29b1",
+        "name": "Add police actions with conform-exceed control <invalid>/drop",
+        "category": [
+            "actions",
+            "police"
+        ],
+        "setup": [
+            [
+                "$TC actions flush action police",
+                0,
+                1,
+                255
+            ]
+        ],
+        "cmdUnderTest": "$TC actions add action police rate 3mbit burst 250k conform-exceed 10/drop index 1",
+        "expExitCode": "255",
+        "verifyCmd": "$TC actions ls action police",
+        "matchPattern": "action order [0-9]*:  police 0x1 rate 3Mbit burst 250Kb mtu 2Kb action ",
+        "matchCount": "0",
+        "teardown": [
+            "$TC actions flush action police"
+        ]
+    },
     {
         "id": "c26f",
         "name": "Add police action with invalid peakrate value",
Signature · 1 line
2.17.1
maintainer
#4 lore raw
In reply to Paolo Abeni

From: Paolo Abeni <[email protected]>
Date: Wed, 29 Aug 2018 10:22:32 +0200

Quoted 8 lines

As agreed some time ago, this changeset reject unknown tcfa_action values, instead of changing such values under the hood.

A tdc test is included to verify the new behavior.

v1 -> v2:
- helper is now static and renamed according to act_* convention
- updated extack message, according to the new behavior

Series applied, thank you.