diff options
author | Patrick McHardy <kaber@trash.net> | 2008-01-23 20:35:39 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 15:11:22 -0800 |
commit | 27a3421e4821734bc19496faa77b380605dc3b23 (patch) | |
tree | f9ded49845a39f41352ed09130bf3d2bd05e4ffe /net/sched/sch_gred.c | |
parent | 5feb5e1aaa887f6427b8290bce48bfb6b7010fc6 (diff) | |
download | linux-27a3421e4821734bc19496faa77b380605dc3b23.tar.gz linux-27a3421e4821734bc19496faa77b380605dc3b23.tar.bz2 linux-27a3421e4821734bc19496faa77b380605dc3b23.zip |
[NET_SCHED]: Use nla_policy for attribute validation in packet schedulers
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/sch_gred.c')
-rw-r--r-- | net/sched/sch_gred.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c index 365c7d8b17ab..3a9d226ff1e4 100644 --- a/net/sched/sch_gred.c +++ b/net/sched/sch_gred.c @@ -356,7 +356,7 @@ static inline int gred_change_table_def(struct Qdisc *sch, struct nlattr *dps) struct tc_gred_sopt *sopt; int i; - if (dps == NULL || nla_len(dps) < sizeof(*sopt)) + if (dps == NULL) return -EINVAL; sopt = nla_data(dps); @@ -425,6 +425,12 @@ static inline int gred_change_vq(struct Qdisc *sch, int dp, return 0; } +static const struct nla_policy gred_policy[TCA_GRED_MAX + 1] = { + [TCA_GRED_PARMS] = { .len = sizeof(struct tc_gred_qopt) }, + [TCA_GRED_STAB] = { .len = 256 }, + [TCA_GRED_DPS] = { .len = sizeof(struct tc_gred_sopt) }, +}; + static int gred_change(struct Qdisc *sch, struct nlattr *opt) { struct gred_sched *table = qdisc_priv(sch); @@ -436,7 +442,7 @@ static int gred_change(struct Qdisc *sch, struct nlattr *opt) if (opt == NULL) return -EINVAL; - err = nla_parse_nested(tb, TCA_GRED_MAX, opt, NULL); + err = nla_parse_nested(tb, TCA_GRED_MAX, opt, gred_policy); if (err < 0) return err; @@ -444,9 +450,7 @@ static int gred_change(struct Qdisc *sch, struct nlattr *opt) return gred_change_table_def(sch, opt); if (tb[TCA_GRED_PARMS] == NULL || - nla_len(tb[TCA_GRED_PARMS]) < sizeof(*ctl) || - tb[TCA_GRED_STAB] == NULL || - nla_len(tb[TCA_GRED_STAB]) < 256) + tb[TCA_GRED_STAB] == NULL) return -EINVAL; err = -EINVAL; @@ -499,7 +503,7 @@ static int gred_init(struct Qdisc *sch, struct nlattr *opt) if (opt == NULL) return -EINVAL; - err = nla_parse_nested(tb, TCA_GRED_MAX, opt, NULL); + err = nla_parse_nested(tb, TCA_GRED_MAX, opt, gred_policy); if (err < 0) return err; |