Skip to content

Commit

Permalink
net_cls_act: act_simple dont ignore realloc code
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jamal Hadi Salim authored and David S. Miller committed May 6, 2008
1 parent 1da5ea1 commit 9d1045a
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions net/sched/act_simple.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,14 @@ static int alloc_defdata(struct tcf_defact *d, char *defdata)
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);
return alloc_defdata(d, defdata);
spin_lock_bh(&d->tcf_lock);
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] = {
Expand Down Expand Up @@ -129,20 +133,17 @@ static int tcf_simp_init(struct nlattr *nla, struct nlattr *est,
kfree(pc);
return ret;
}
d->tcf_action = parm->action;
ret = ACT_P_CREATED;
} else {
d = to_defact(pc);
if (!ovr) {
tcf_simp_release(d, bind);
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)
tcf_hash_insert(pc, &simp_hash_info);
return ret;
Expand Down

0 comments on commit 9d1045a

Please sign in to comment.