wimax: oops: wimax_dev_add() is the only one that can initialize the state
[safe/jmp/linux-2.6] / net / xfrm / xfrm_user.c
index ab8b138..b95a2d6 100644 (file)
@@ -368,9 +368,9 @@ static struct xfrm_state *xfrm_state_construct(struct net *net,
                goto error;
 
        x->km.seq = p->seq;
-       x->replay_maxdiff = sysctl_xfrm_aevent_rseqth;
+       x->replay_maxdiff = net->xfrm.sysctl_aevent_rseqth;
        /* sysctl_xfrm_aevent_etime is in 100ms units */
-       x->replay_maxage = (sysctl_xfrm_aevent_etime*HZ)/XFRM_AE_ETH_M;
+       x->replay_maxage = (net->xfrm.sysctl_aevent_etime*HZ)/XFRM_AE_ETH_M;
        x->preplay.bitmap = 0;
        x->preplay.seq = x->replay.seq+x->replay_maxdiff;
        x->preplay.oseq = x->replay.oseq +x->replay_maxdiff;
@@ -1418,6 +1418,7 @@ static int xfrm_flush_sa(struct sk_buff *skb, struct nlmsghdr *nlh,
        c.event = nlh->nlmsg_type;
        c.seq = nlh->nlmsg_seq;
        c.pid = nlh->nlmsg_pid;
+       c.net = net;
        km_state_notify(NULL, &c);
 
        return 0;
@@ -1569,6 +1570,7 @@ static int xfrm_flush_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
        c.event = nlh->nlmsg_type;
        c.seq = nlh->nlmsg_seq;
        c.pid = nlh->nlmsg_pid;
+       c.net = net;
        km_policy_notify(NULL, 0, &c);
        return 0;
 }
@@ -1686,21 +1688,16 @@ static int xfrm_add_acquire(struct sk_buff *skb, struct nlmsghdr *nlh,
        int err = -ENOMEM;
 
        if (!x)
-               return err;
+               goto nomem;
 
        err = verify_newpolicy_info(&ua->policy);
-       if (err) {
-               printk("BAD policy passed\n");
-               kfree(x);
-               return err;
-       }
+       if (err)
+               goto bad_policy;
 
        /*   build an XP */
        xp = xfrm_policy_construct(net, &ua->policy, attrs, &err);
-       if (!xp) {
-               kfree(x);
-               return err;
-       }
+       if (!xp)
+               goto free_state;
 
        memcpy(&x->id, &ua->id, sizeof(ua->id));
        memcpy(&x->props.saddr, &ua->saddr, sizeof(ua->saddr));
@@ -1725,6 +1722,13 @@ static int xfrm_add_acquire(struct sk_buff *skb, struct nlmsghdr *nlh,
        kfree(xp);
 
        return 0;
+
+bad_policy:
+       printk("BAD policy passed\n");
+free_state:
+       kfree(x);
+nomem:
+       return err;
 }
 
 #ifdef CONFIG_XFRM_MIGRATE
@@ -2084,7 +2088,7 @@ static int xfrm_aevent_state_notify(struct xfrm_state *x, struct km_event *c)
 
 static int xfrm_notify_sa_flush(struct km_event *c)
 {
-       struct net *net = &init_net;
+       struct net *net = c->net;
        struct xfrm_usersa_flush *p;
        struct nlmsghdr *nlh;
        struct sk_buff *skb;
@@ -2446,7 +2450,7 @@ nlmsg_failure:
 
 static int xfrm_notify_policy_flush(struct km_event *c)
 {
-       struct net *net = &init_net;
+       struct net *net = c->net;
        struct nlmsghdr *nlh;
        struct sk_buff *skb;
 
@@ -2518,10 +2522,9 @@ nla_put_failure:
        return -EMSGSIZE;
 }
 
-static int xfrm_send_report(u8 proto, struct xfrm_selector *sel,
-                           xfrm_address_t *addr)
+static int xfrm_send_report(struct net *net, u8 proto,
+                           struct xfrm_selector *sel, xfrm_address_t *addr)
 {
-       struct net *net = &init_net;
        struct sk_buff *skb;
 
        skb = nlmsg_new(xfrm_report_msgsize(), GFP_ATOMIC);