Skip to content

Commit 5e1567a

Browse files
jhsmtdavem330
authored andcommitted
net sched: skbedit action fix late binding
The process below was broken and is fixed with this patch. //add a skbedit action and give it an instance id of 1 sudo tc actions add action skbedit mark 10 index 1 //create a filter which binds to skbedit action id 1 sudo tc filter add dev $DEV parent ffff: protocol ip prio 1 u32\ match ip dst 17.0.0.1/32 flowid 1:10 action skbedit index 1 Message before fix was: RTNETLINK answers: Invalid argument We have an error talking to the kernel Signed-off-by: Jamal Hadi Salim <[email protected]> Reviewed-by: Cong Wang <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 0e5538a commit 5e1567a

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

net/sched/act_skbedit.c

+11-7
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ static int tcf_skbedit_init(struct net *net, struct nlattr *nla,
6969
struct tcf_skbedit *d;
7070
u32 flags = 0, *priority = NULL, *mark = NULL;
7171
u16 *queue_mapping = NULL;
72-
int ret = 0, err;
72+
int ret = 0, err, exists = 0;
7373

7474
if (nla == NULL)
7575
return -EINVAL;
@@ -96,12 +96,18 @@ static int tcf_skbedit_init(struct net *net, struct nlattr *nla,
9696
mark = nla_data(tb[TCA_SKBEDIT_MARK]);
9797
}
9898

99-
if (!flags)
100-
return -EINVAL;
101-
10299
parm = nla_data(tb[TCA_SKBEDIT_PARMS]);
103100

104-
if (!tcf_hash_check(tn, parm->index, a, bind)) {
101+
exists = tcf_hash_check(tn, parm->index, a, bind);
102+
if (exists && bind)
103+
return 0;
104+
105+
if (!flags) {
106+
tcf_hash_release(a, bind);
107+
return -EINVAL;
108+
}
109+
110+
if (!exists) {
105111
ret = tcf_hash_create(tn, parm->index, est, a,
106112
sizeof(*d), bind, false);
107113
if (ret)
@@ -111,8 +117,6 @@ static int tcf_skbedit_init(struct net *net, struct nlattr *nla,
111117
ret = ACT_P_CREATED;
112118
} else {
113119
d = to_skbedit(a);
114-
if (bind)
115-
return 0;
116120
tcf_hash_release(a, bind);
117121
if (!ovr)
118122
return -EEXIST;

0 commit comments

Comments
 (0)