Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec
[sfrench/cifs-2.6.git] / net / xfrm / xfrm_user.c
index f0aecee4d5392f24b4bacb366ea728d823aa50a7..b47d613409b70ad2c290c8542474ea2ea7e8b678 100644 (file)
@@ -580,6 +580,20 @@ static struct xfrm_state *xfrm_state_construct(struct net *net,
 
        copy_from_user_state(x, p);
 
+       if (attrs[XFRMA_ENCAP]) {
+               x->encap = kmemdup(nla_data(attrs[XFRMA_ENCAP]),
+                                  sizeof(*x->encap), GFP_KERNEL);
+               if (x->encap == NULL)
+                       goto error;
+       }
+
+       if (attrs[XFRMA_COADDR]) {
+               x->coaddr = kmemdup(nla_data(attrs[XFRMA_COADDR]),
+                                   sizeof(*x->coaddr), GFP_KERNEL);
+               if (x->coaddr == NULL)
+                       goto error;
+       }
+
        if (attrs[XFRMA_SA_EXTRA_FLAGS])
                x->props.extra_flags = nla_get_u32(attrs[XFRMA_SA_EXTRA_FLAGS]);
 
@@ -600,23 +614,9 @@ static struct xfrm_state *xfrm_state_construct(struct net *net,
                                   attrs[XFRMA_ALG_COMP])))
                goto error;
 
-       if (attrs[XFRMA_ENCAP]) {
-               x->encap = kmemdup(nla_data(attrs[XFRMA_ENCAP]),
-                                  sizeof(*x->encap), GFP_KERNEL);
-               if (x->encap == NULL)
-                       goto error;
-       }
-
        if (attrs[XFRMA_TFCPAD])
                x->tfcpad = nla_get_u32(attrs[XFRMA_TFCPAD]);
 
-       if (attrs[XFRMA_COADDR]) {
-               x->coaddr = kmemdup(nla_data(attrs[XFRMA_COADDR]),
-                                   sizeof(*x->coaddr), GFP_KERNEL);
-               if (x->coaddr == NULL)
-                       goto error;
-       }
-
        xfrm_mark_get(attrs, &x->mark);
 
        xfrm_smark_init(attrs, &x->props.smark);