diff options
Diffstat (limited to 'net/sched/act_nat.c')
-rw-r--r-- | net/sched/act_nat.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c index 5a512d4dc37c..0a3c8339767a 100644 --- a/net/sched/act_nat.c +++ b/net/sched/act_nat.c | |||
@@ -40,6 +40,10 @@ static struct tcf_hashinfo nat_hash_info = { | |||
40 | .lock = &nat_lock, | 40 | .lock = &nat_lock, |
41 | }; | 41 | }; |
42 | 42 | ||
43 | static const struct nla_policy nat_policy[TCA_NAT_MAX + 1] = { | ||
44 | [TCA_NAT_PARMS] = { .len = sizeof(struct tc_nat) }, | ||
45 | }; | ||
46 | |||
43 | static int tcf_nat_init(struct nlattr *nla, struct nlattr *est, | 47 | static int tcf_nat_init(struct nlattr *nla, struct nlattr *est, |
44 | struct tc_action *a, int ovr, int bind) | 48 | struct tc_action *a, int ovr, int bind) |
45 | { | 49 | { |
@@ -52,12 +56,11 @@ static int tcf_nat_init(struct nlattr *nla, struct nlattr *est, | |||
52 | if (nla == NULL) | 56 | if (nla == NULL) |
53 | return -EINVAL; | 57 | return -EINVAL; |
54 | 58 | ||
55 | err = nla_parse_nested(tb, TCA_NAT_MAX, nla, NULL); | 59 | err = nla_parse_nested(tb, TCA_NAT_MAX, nla, nat_policy); |
56 | if (err < 0) | 60 | if (err < 0) |
57 | return err; | 61 | return err; |
58 | 62 | ||
59 | if (tb[TCA_NAT_PARMS] == NULL || | 63 | if (tb[TCA_NAT_PARMS] == NULL) |
60 | nla_len(tb[TCA_NAT_PARMS]) < sizeof(*parm)) | ||
61 | return -EINVAL; | 64 | return -EINVAL; |
62 | parm = nla_data(tb[TCA_NAT_PARMS]); | 65 | parm = nla_data(tb[TCA_NAT_PARMS]); |
63 | 66 | ||