]> Pileus Git - ~andy/linux/blobdiff - net/netfilter/nfnetlink_cthelper.c
Merge tag 'v3.9-rc3' into v4l_for_linus
[~andy/linux] / net / netfilter / nfnetlink_cthelper.c
index d6836193d479a00b155884a259a6d1f2f0245a4c..a191b6db657e5e2bd007f6fe342da600d58bf668 100644 (file)
@@ -74,7 +74,7 @@ nfnl_cthelper_parse_tuple(struct nf_conntrack_tuple *tuple,
        if (!tb[NFCTH_TUPLE_L3PROTONUM] || !tb[NFCTH_TUPLE_L4PROTONUM])
                return -EINVAL;
 
-       tuple->src.l3num = ntohs(nla_get_u16(tb[NFCTH_TUPLE_L3PROTONUM]));
+       tuple->src.l3num = ntohs(nla_get_be16(tb[NFCTH_TUPLE_L3PROTONUM]));
        tuple->dst.protonum = nla_get_u8(tb[NFCTH_TUPLE_L4PROTONUM]);
 
        return 0;
@@ -85,6 +85,9 @@ nfnl_cthelper_from_nlattr(struct nlattr *attr, struct nf_conn *ct)
 {
        const struct nf_conn_help *help = nfct_help(ct);
 
+       if (attr == NULL)
+               return -EINVAL;
+
        if (help->helper->data_len == 0)
                return -EINVAL;
 
@@ -279,7 +282,6 @@ nfnl_cthelper_new(struct sock *nfnl, struct sk_buff *skb,
        const char *helper_name;
        struct nf_conntrack_helper *cur, *helper = NULL;
        struct nf_conntrack_tuple tuple;
-       struct hlist_node *n;
        int ret = 0, i;
 
        if (!tb[NFCTH_NAME] || !tb[NFCTH_TUPLE])
@@ -293,7 +295,7 @@ nfnl_cthelper_new(struct sock *nfnl, struct sk_buff *skb,
 
        rcu_read_lock();
        for (i = 0; i < nf_ct_helper_hsize && !helper; i++) {
-               hlist_for_each_entry_rcu(cur, n, &nf_ct_helper_hash[i], hnode) {
+               hlist_for_each_entry_rcu(cur, &nf_ct_helper_hash[i], hnode) {
 
                        /* skip non-userspace conntrack helpers. */
                        if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
@@ -395,16 +397,16 @@ nla_put_failure:
 }
 
 static int
-nfnl_cthelper_fill_info(struct sk_buff *skb, u32 pid, u32 seq, u32 type,
+nfnl_cthelper_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type,
                        int event, struct nf_conntrack_helper *helper)
 {
        struct nlmsghdr *nlh;
        struct nfgenmsg *nfmsg;
-       unsigned int flags = pid ? NLM_F_MULTI : 0;
+       unsigned int flags = portid ? NLM_F_MULTI : 0;
        int status;
 
        event |= NFNL_SUBSYS_CTHELPER << 8;
-       nlh = nlmsg_put(skb, pid, seq, event, sizeof(*nfmsg), flags);
+       nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags);
        if (nlh == NULL)
                goto nlmsg_failure;
 
@@ -449,13 +451,12 @@ static int
 nfnl_cthelper_dump_table(struct sk_buff *skb, struct netlink_callback *cb)
 {
        struct nf_conntrack_helper *cur, *last;
-       struct hlist_node *n;
 
        rcu_read_lock();
        last = (struct nf_conntrack_helper *)cb->args[1];
        for (; cb->args[0] < nf_ct_helper_hsize; cb->args[0]++) {
 restart:
-               hlist_for_each_entry_rcu(cur, n,
+               hlist_for_each_entry_rcu(cur,
                                &nf_ct_helper_hash[cb->args[0]], hnode) {
 
                        /* skip non-userspace conntrack helpers. */
@@ -468,7 +469,7 @@ restart:
                                cb->args[1] = 0;
                        }
                        if (nfnl_cthelper_fill_info(skb,
-                                           NETLINK_CB(cb->skb).pid,
+                                           NETLINK_CB(cb->skb).portid,
                                            cb->nlh->nlmsg_seq,
                                            NFNL_MSG_TYPE(cb->nlh->nlmsg_type),
                                            NFNL_MSG_CTHELPER_NEW, cur) < 0) {
@@ -492,7 +493,6 @@ nfnl_cthelper_get(struct sock *nfnl, struct sk_buff *skb,
 {
        int ret = -ENOENT, i;
        struct nf_conntrack_helper *cur;
-       struct hlist_node *n;
        struct sk_buff *skb2;
        char *helper_name = NULL;
        struct nf_conntrack_tuple tuple;
@@ -517,7 +517,7 @@ nfnl_cthelper_get(struct sock *nfnl, struct sk_buff *skb,
        }
 
        for (i = 0; i < nf_ct_helper_hsize; i++) {
-               hlist_for_each_entry_rcu(cur, n, &nf_ct_helper_hash[i], hnode) {
+               hlist_for_each_entry_rcu(cur, &nf_ct_helper_hash[i], hnode) {
 
                        /* skip non-userspace conntrack helpers. */
                        if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
@@ -538,7 +538,7 @@ nfnl_cthelper_get(struct sock *nfnl, struct sk_buff *skb,
                                break;
                        }
 
-                       ret = nfnl_cthelper_fill_info(skb2, NETLINK_CB(skb).pid,
+                       ret = nfnl_cthelper_fill_info(skb2, NETLINK_CB(skb).portid,
                                                nlh->nlmsg_seq,
                                                NFNL_MSG_TYPE(nlh->nlmsg_type),
                                                NFNL_MSG_CTHELPER_NEW, cur);
@@ -547,7 +547,7 @@ nfnl_cthelper_get(struct sock *nfnl, struct sk_buff *skb,
                                break;
                        }
 
-                       ret = netlink_unicast(nfnl, skb2, NETLINK_CB(skb).pid,
+                       ret = netlink_unicast(nfnl, skb2, NETLINK_CB(skb).portid,
                                                MSG_DONTWAIT);
                        if (ret > 0)
                                ret = 0;
@@ -565,7 +565,7 @@ nfnl_cthelper_del(struct sock *nfnl, struct sk_buff *skb,
 {
        char *helper_name = NULL;
        struct nf_conntrack_helper *cur;
-       struct hlist_node *n, *tmp;
+       struct hlist_node *tmp;
        struct nf_conntrack_tuple tuple;
        bool tuple_set = false, found = false;
        int i, j = 0, ret;
@@ -582,7 +582,7 @@ nfnl_cthelper_del(struct sock *nfnl, struct sk_buff *skb,
        }
 
        for (i = 0; i < nf_ct_helper_hsize; i++) {
-               hlist_for_each_entry_safe(cur, n, tmp, &nf_ct_helper_hash[i],
+               hlist_for_each_entry_safe(cur, tmp, &nf_ct_helper_hash[i],
                                                                hnode) {
                        /* skip non-userspace conntrack helpers. */
                        if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
@@ -651,13 +651,13 @@ err_out:
 static void __exit nfnl_cthelper_exit(void)
 {
        struct nf_conntrack_helper *cur;
-       struct hlist_node *n, *tmp;
+       struct hlist_node *tmp;
        int i;
 
        nfnetlink_subsys_unregister(&nfnl_cthelper_subsys);
 
        for (i=0; i<nf_ct_helper_hsize; i++) {
-               hlist_for_each_entry_safe(cur, n, tmp, &nf_ct_helper_hash[i],
+               hlist_for_each_entry_safe(cur, tmp, &nf_ct_helper_hash[i],
                                                                        hnode) {
                        /* skip non-userspace conntrack helpers. */
                        if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))