net_cls_act: act_simple dont ignore realloc code
reallocation of the policy data was being ignored. It could fail. Simplify so that there is no need for reallocating. Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
1da5ea1a8b
commit
9d1045ad68
@@ -79,10 +79,14 @@ static int alloc_defdata(struct tcf_defact *d, char *defdata)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int realloc_defdata(struct tcf_defact *d, char *defdata)
|
static void reset_policy(struct tcf_defact *d, char *defdata,
|
||||||
|
struct tc_defact *p)
|
||||||
{
|
{
|
||||||
kfree(d->tcfd_defdata);
|
spin_lock_bh(&d->tcf_lock);
|
||||||
return alloc_defdata(d, defdata);
|
d->tcf_action = p->action;
|
||||||
|
memset(d->tcfd_defdata, 0, SIMP_MAX_DATA);
|
||||||
|
strlcpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
|
||||||
|
spin_unlock_bh(&d->tcf_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct nla_policy simple_policy[TCA_DEF_MAX + 1] = {
|
static const struct nla_policy simple_policy[TCA_DEF_MAX + 1] = {
|
||||||
@@ -129,6 +133,7 @@ static int tcf_simp_init(struct nlattr *nla, struct nlattr *est,
|
|||||||
kfree(pc);
|
kfree(pc);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
d->tcf_action = parm->action;
|
||||||
ret = ACT_P_CREATED;
|
ret = ACT_P_CREATED;
|
||||||
} else {
|
} else {
|
||||||
d = to_defact(pc);
|
d = to_defact(pc);
|
||||||
@@ -136,13 +141,9 @@ static int tcf_simp_init(struct nlattr *nla, struct nlattr *est,
|
|||||||
tcf_simp_release(d, bind);
|
tcf_simp_release(d, bind);
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
}
|
}
|
||||||
realloc_defdata(d, defdata);
|
reset_policy(d, defdata, parm);
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_bh(&d->tcf_lock);
|
|
||||||
d->tcf_action = parm->action;
|
|
||||||
spin_unlock_bh(&d->tcf_lock);
|
|
||||||
|
|
||||||
if (ret == ACT_P_CREATED)
|
if (ret == ACT_P_CREATED)
|
||||||
tcf_hash_insert(pc, &simp_hash_info);
|
tcf_hash_insert(pc, &simp_hash_info);
|
||||||
return ret;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user