aboutsummaryrefslogtreecommitdiffstats
path: root/net/netfilter
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2010-02-10 09:38:33 -0500
committerPatrick McHardy <kaber@trash.net>2010-02-10 09:38:33 -0500
commitd0b0268fddea3235a8df35e52167c3b206bf2f5a (patch)
tree16669d6e575b919b792c1cffc34015ffbed091c1 /net/netfilter
parent42107f5009da223daa800d6da6904d77297ae829 (diff)
netfilter: ctnetlink: add missing netlink attribute policies
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'net/netfilter')
-rw-r--r--net/netfilter/nf_conntrack_netlink.c41
1 files changed, 36 insertions, 5 deletions
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
index 327c5174440..5c103b8c7df 100644
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
@@ -708,6 +708,11 @@ ctnetlink_parse_tuple_proto(struct nlattr *attr,
708 return ret; 708 return ret;
709} 709}
710 710
711static const struct nla_policy tuple_nla_policy[CTA_TUPLE_MAX+1] = {
712 [CTA_TUPLE_IP] = { .type = NLA_NESTED },
713 [CTA_TUPLE_PROTO] = { .type = NLA_NESTED },
714};
715
711static int 716static int
712ctnetlink_parse_tuple(const struct nlattr * const cda[], 717ctnetlink_parse_tuple(const struct nlattr * const cda[],
713 struct nf_conntrack_tuple *tuple, 718 struct nf_conntrack_tuple *tuple,
@@ -718,7 +723,7 @@ ctnetlink_parse_tuple(const struct nlattr * const cda[],
718 723
719 memset(tuple, 0, sizeof(*tuple)); 724 memset(tuple, 0, sizeof(*tuple));
720 725
721 nla_parse_nested(tb, CTA_TUPLE_MAX, cda[type], NULL); 726 nla_parse_nested(tb, CTA_TUPLE_MAX, cda[type], tuple_nla_policy);
722 727
723 if (!tb[CTA_TUPLE_IP]) 728 if (!tb[CTA_TUPLE_IP])
724 return -EINVAL; 729 return -EINVAL;
@@ -745,12 +750,16 @@ ctnetlink_parse_tuple(const struct nlattr * const cda[],
745 return 0; 750 return 0;
746} 751}
747 752
753static const struct nla_policy help_nla_policy[CTA_HELP_MAX+1] = {
754 [CTA_HELP_NAME] = { .type = NLA_NUL_STRING },
755};
756
748static inline int 757static inline int
749ctnetlink_parse_help(const struct nlattr *attr, char **helper_name) 758ctnetlink_parse_help(const struct nlattr *attr, char **helper_name)
750{ 759{
751 struct nlattr *tb[CTA_HELP_MAX+1]; 760 struct nlattr *tb[CTA_HELP_MAX+1];
752 761
753 nla_parse_nested(tb, CTA_HELP_MAX, attr, NULL); 762 nla_parse_nested(tb, CTA_HELP_MAX, attr, help_nla_policy);
754 763
755 if (!tb[CTA_HELP_NAME]) 764 if (!tb[CTA_HELP_NAME])
756 return -EINVAL; 765 return -EINVAL;
@@ -761,11 +770,17 @@ ctnetlink_parse_help(const struct nlattr *attr, char **helper_name)
761} 770}
762 771
763static const struct nla_policy ct_nla_policy[CTA_MAX+1] = { 772static const struct nla_policy ct_nla_policy[CTA_MAX+1] = {
773 [CTA_TUPLE_ORIG] = { .type = NLA_NESTED },
774 [CTA_TUPLE_REPLY] = { .type = NLA_NESTED },
764 [CTA_STATUS] = { .type = NLA_U32 }, 775 [CTA_STATUS] = { .type = NLA_U32 },
776 [CTA_PROTOINFO] = { .type = NLA_NESTED },
777 [CTA_HELP] = { .type = NLA_NESTED },
778 [CTA_NAT_SRC] = { .type = NLA_NESTED },
765 [CTA_TIMEOUT] = { .type = NLA_U32 }, 779 [CTA_TIMEOUT] = { .type = NLA_U32 },
766 [CTA_MARK] = { .type = NLA_U32 }, 780 [CTA_MARK] = { .type = NLA_U32 },
767 [CTA_USE] = { .type = NLA_U32 },
768 [CTA_ID] = { .type = NLA_U32 }, 781 [CTA_ID] = { .type = NLA_U32 },
782 [CTA_NAT_DST] = { .type = NLA_NESTED },
783 [CTA_TUPLE_MASTER] = { .type = NLA_NESTED },
769}; 784};
770 785
771static int 786static int
@@ -1053,6 +1068,12 @@ ctnetlink_change_timeout(struct nf_conn *ct, const struct nlattr * const cda[])
1053 return 0; 1068 return 0;
1054} 1069}
1055 1070
1071static const struct nla_policy protoinfo_policy[CTA_PROTOINFO_MAX+1] = {
1072 [CTA_PROTOINFO_TCP] = { .type = NLA_NESTED },
1073 [CTA_PROTOINFO_DCCP] = { .type = NLA_NESTED },
1074 [CTA_PROTOINFO_SCTP] = { .type = NLA_NESTED },
1075};
1076
1056static inline int 1077static inline int
1057ctnetlink_change_protoinfo(struct nf_conn *ct, const struct nlattr * const cda[]) 1078ctnetlink_change_protoinfo(struct nf_conn *ct, const struct nlattr * const cda[])
1058{ 1079{
@@ -1061,7 +1082,7 @@ ctnetlink_change_protoinfo(struct nf_conn *ct, const struct nlattr * const cda[]
1061 struct nf_conntrack_l4proto *l4proto; 1082 struct nf_conntrack_l4proto *l4proto;
1062 int err = 0; 1083 int err = 0;
1063 1084
1064 nla_parse_nested(tb, CTA_PROTOINFO_MAX, attr, NULL); 1085 nla_parse_nested(tb, CTA_PROTOINFO_MAX, attr, protoinfo_policy);
1065 1086
1066 rcu_read_lock(); 1087 rcu_read_lock();
1067 l4proto = __nf_ct_l4proto_find(nf_ct_l3num(ct), nf_ct_protonum(ct)); 1088 l4proto = __nf_ct_l4proto_find(nf_ct_l3num(ct), nf_ct_protonum(ct));
@@ -1073,12 +1094,18 @@ ctnetlink_change_protoinfo(struct nf_conn *ct, const struct nlattr * const cda[]
1073} 1094}
1074 1095
1075#ifdef CONFIG_NF_NAT_NEEDED 1096#ifdef CONFIG_NF_NAT_NEEDED
1097static const struct nla_policy nat_seq_policy[CTA_NAT_SEQ_MAX+1] = {
1098 [CTA_NAT_SEQ_CORRECTION_POS] = { .type = NLA_U32 },
1099 [CTA_NAT_SEQ_OFFSET_BEFORE] = { .type = NLA_U32 },
1100 [CTA_NAT_SEQ_OFFSET_AFTER] = { .type = NLA_U32 },
1101};
1102
1076static inline int 1103static inline int
1077change_nat_seq_adj(struct nf_nat_seq *natseq, const struct nlattr * const attr) 1104change_nat_seq_adj(struct nf_nat_seq *natseq, const struct nlattr * const attr)
1078{ 1105{
1079 struct nlattr *cda[CTA_NAT_SEQ_MAX+1]; 1106 struct nlattr *cda[CTA_NAT_SEQ_MAX+1];
1080 1107
1081 nla_parse_nested(cda, CTA_NAT_SEQ_MAX, attr, NULL); 1108 nla_parse_nested(cda, CTA_NAT_SEQ_MAX, attr, nat_seq_policy);
1082 1109
1083 if (!cda[CTA_NAT_SEQ_CORRECTION_POS]) 1110 if (!cda[CTA_NAT_SEQ_CORRECTION_POS])
1084 return -EINVAL; 1111 return -EINVAL;
@@ -1648,8 +1675,12 @@ out:
1648} 1675}
1649 1676
1650static const struct nla_policy exp_nla_policy[CTA_EXPECT_MAX+1] = { 1677static const struct nla_policy exp_nla_policy[CTA_EXPECT_MAX+1] = {
1678 [CTA_EXPECT_MASTER] = { .type = NLA_NESTED },
1679 [CTA_EXPECT_TUPLE] = { .type = NLA_NESTED },
1680 [CTA_EXPECT_MASK] = { .type = NLA_NESTED },
1651 [CTA_EXPECT_TIMEOUT] = { .type = NLA_U32 }, 1681 [CTA_EXPECT_TIMEOUT] = { .type = NLA_U32 },
1652 [CTA_EXPECT_ID] = { .type = NLA_U32 }, 1682 [CTA_EXPECT_ID] = { .type = NLA_U32 },
1683 [CTA_EXPECT_HELP_NAME] = { .type = NLA_NUL_STRING },
1653}; 1684};
1654 1685
1655static int 1686static int