netfilter: nfnetlink: pass down netns pointer to call() and call_rcu()
[cascardo/linux.git] / net / netfilter / ipset / ip_set_core.c
index 54f3d7c..95db43f 100644 (file)
@@ -825,20 +825,17 @@ find_free_id(struct ip_set_net *inst, const char *name, ip_set_id_t *index,
        return 0;
 }
 
-static int
-ip_set_none(struct sock *ctnl, struct sk_buff *skb,
-           const struct nlmsghdr *nlh,
-           const struct nlattr * const attr[])
+static int ip_set_none(struct net *net, struct sock *ctnl, struct sk_buff *skb,
+                      const struct nlmsghdr *nlh,
+                      const struct nlattr * const attr[])
 {
        return -EOPNOTSUPP;
 }
 
-static int
-ip_set_create(struct sock *ctnl, struct sk_buff *skb,
-             const struct nlmsghdr *nlh,
-             const struct nlattr * const attr[])
+static int ip_set_create(struct net *net, struct sock *ctnl,
+                        struct sk_buff *skb, const struct nlmsghdr *nlh,
+                        const struct nlattr * const attr[])
 {
-       struct net *net = sock_net(ctnl);
        struct ip_set_net *inst = ip_set_pernet(net);
        struct ip_set *set, *clash = NULL;
        ip_set_id_t index = IPSET_INVALID_ID;
@@ -976,12 +973,11 @@ ip_set_destroy_set(struct ip_set *set)
        kfree(set);
 }
 
-static int
-ip_set_destroy(struct sock *ctnl, struct sk_buff *skb,
-              const struct nlmsghdr *nlh,
-              const struct nlattr * const attr[])
+static int ip_set_destroy(struct net *net, struct sock *ctnl,
+                         struct sk_buff *skb, const struct nlmsghdr *nlh,
+                         const struct nlattr * const attr[])
 {
-       struct ip_set_net *inst = ip_set_pernet(sock_net(ctnl));
+       struct ip_set_net *inst = ip_set_pernet(net);
        struct ip_set *s;
        ip_set_id_t i;
        int ret = 0;
@@ -1052,12 +1048,11 @@ ip_set_flush_set(struct ip_set *set)
        spin_unlock_bh(&set->lock);
 }
 
-static int
-ip_set_flush(struct sock *ctnl, struct sk_buff *skb,
-            const struct nlmsghdr *nlh,
-            const struct nlattr * const attr[])
+static int ip_set_flush(struct net *net, struct sock *ctnl, struct sk_buff *skb,
+                       const struct nlmsghdr *nlh,
+                       const struct nlattr * const attr[])
 {
-       struct ip_set_net *inst = ip_set_pernet(sock_net(ctnl));
+       struct ip_set_net *inst = ip_set_pernet(net);
        struct ip_set *s;
        ip_set_id_t i;
 
@@ -1092,12 +1087,11 @@ ip_set_setname2_policy[IPSET_ATTR_CMD_MAX + 1] = {
                                    .len = IPSET_MAXNAMELEN - 1 },
 };
 
-static int
-ip_set_rename(struct sock *ctnl, struct sk_buff *skb,
-             const struct nlmsghdr *nlh,
-             const struct nlattr * const attr[])
+static int ip_set_rename(struct net *net, struct sock *ctnl,
+                        struct sk_buff *skb, const struct nlmsghdr *nlh,
+                        const struct nlattr * const attr[])
 {
-       struct ip_set_net *inst = ip_set_pernet(sock_net(ctnl));
+       struct ip_set_net *inst = ip_set_pernet(net);
        struct ip_set *set, *s;
        const char *name2;
        ip_set_id_t i;
@@ -1142,12 +1136,11 @@ out:
  * so the ip_set_list always contains valid pointers to the sets.
  */
 
-static int
-ip_set_swap(struct sock *ctnl, struct sk_buff *skb,
-           const struct nlmsghdr *nlh,
-           const struct nlattr * const attr[])
+static int ip_set_swap(struct net *net, struct sock *ctnl, struct sk_buff *skb,
+                      const struct nlmsghdr *nlh,
+                      const struct nlattr * const attr[])
 {
-       struct ip_set_net *inst = ip_set_pernet(sock_net(ctnl));
+       struct ip_set_net *inst = ip_set_pernet(net);
        struct ip_set *from, *to;
        ip_set_id_t from_id, to_id;
        char from_name[IPSET_MAXNAMELEN];
@@ -1413,10 +1406,9 @@ out:
        return ret < 0 ? ret : skb->len;
 }
 
-static int
-ip_set_dump(struct sock *ctnl, struct sk_buff *skb,
-           const struct nlmsghdr *nlh,
-           const struct nlattr * const attr[])
+static int ip_set_dump(struct net *net, struct sock *ctnl, struct sk_buff *skb,
+                      const struct nlmsghdr *nlh,
+                      const struct nlattr * const attr[])
 {
        if (unlikely(protocol_failed(attr)))
                return -IPSET_ERR_PROTOCOL;
@@ -1500,12 +1492,11 @@ call_ad(struct sock *ctnl, struct sk_buff *skb, struct ip_set *set,
        return ret;
 }
 
-static int
-ip_set_uadd(struct sock *ctnl, struct sk_buff *skb,
-           const struct nlmsghdr *nlh,
-           const struct nlattr * const attr[])
+static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
+                      const struct nlmsghdr *nlh,
+                      const struct nlattr * const attr[])
 {
-       struct ip_set_net *inst = ip_set_pernet(sock_net(ctnl));
+       struct ip_set_net *inst = ip_set_pernet(net);
        struct ip_set *set;
        struct nlattr *tb[IPSET_ATTR_ADT_MAX + 1] = {};
        const struct nlattr *nla;
@@ -1555,12 +1546,11 @@ ip_set_uadd(struct sock *ctnl, struct sk_buff *skb,
        return ret;
 }
 
-static int
-ip_set_udel(struct sock *ctnl, struct sk_buff *skb,
-           const struct nlmsghdr *nlh,
-           const struct nlattr * const attr[])
+static int ip_set_udel(struct net *net, struct sock *ctnl, struct sk_buff *skb,
+                      const struct nlmsghdr *nlh,
+                      const struct nlattr * const attr[])
 {
-       struct ip_set_net *inst = ip_set_pernet(sock_net(ctnl));
+       struct ip_set_net *inst = ip_set_pernet(net);
        struct ip_set *set;
        struct nlattr *tb[IPSET_ATTR_ADT_MAX + 1] = {};
        const struct nlattr *nla;
@@ -1610,12 +1600,11 @@ ip_set_udel(struct sock *ctnl, struct sk_buff *skb,
        return ret;
 }
 
-static int
-ip_set_utest(struct sock *ctnl, struct sk_buff *skb,
-            const struct nlmsghdr *nlh,
-            const struct nlattr * const attr[])
+static int ip_set_utest(struct net *net, struct sock *ctnl, struct sk_buff *skb,
+                       const struct nlmsghdr *nlh,
+                       const struct nlattr * const attr[])
 {
-       struct ip_set_net *inst = ip_set_pernet(sock_net(ctnl));
+       struct ip_set_net *inst = ip_set_pernet(net);
        struct ip_set *set;
        struct nlattr *tb[IPSET_ATTR_ADT_MAX + 1] = {};
        int ret = 0;
@@ -1646,12 +1635,11 @@ ip_set_utest(struct sock *ctnl, struct sk_buff *skb,
 
 /* Get headed data of a set */
 
-static int
-ip_set_header(struct sock *ctnl, struct sk_buff *skb,
-             const struct nlmsghdr *nlh,
-             const struct nlattr * const attr[])
+static int ip_set_header(struct net *net, struct sock *ctnl,
+                        struct sk_buff *skb, const struct nlmsghdr *nlh,
+                        const struct nlattr * const attr[])
 {
-       struct ip_set_net *inst = ip_set_pernet(sock_net(ctnl));
+       struct ip_set_net *inst = ip_set_pernet(net);
        const struct ip_set *set;
        struct sk_buff *skb2;
        struct nlmsghdr *nlh2;
@@ -1703,10 +1691,9 @@ static const struct nla_policy ip_set_type_policy[IPSET_ATTR_CMD_MAX + 1] = {
        [IPSET_ATTR_FAMILY]     = { .type = NLA_U8 },
 };
 
-static int
-ip_set_type(struct sock *ctnl, struct sk_buff *skb,
-           const struct nlmsghdr *nlh,
-           const struct nlattr * const attr[])
+static int ip_set_type(struct net *net, struct sock *ctnl, struct sk_buff *skb,
+                      const struct nlmsghdr *nlh,
+                      const struct nlattr * const attr[])
 {
        struct sk_buff *skb2;
        struct nlmsghdr *nlh2;
@@ -1762,10 +1749,9 @@ ip_set_protocol_policy[IPSET_ATTR_CMD_MAX + 1] = {
        [IPSET_ATTR_PROTOCOL]   = { .type = NLA_U8 },
 };
 
-static int
-ip_set_protocol(struct sock *ctnl, struct sk_buff *skb,
-               const struct nlmsghdr *nlh,
-               const struct nlattr * const attr[])
+static int ip_set_protocol(struct net *net, struct sock *ctnl,
+                          struct sk_buff *skb, const struct nlmsghdr *nlh,
+                          const struct nlattr * const attr[])
 {
        struct sk_buff *skb2;
        struct nlmsghdr *nlh2;