Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / net / xfrm / xfrm_user.c
index 3e6a722..81d1005 100644 (file)
@@ -427,25 +427,23 @@ static int xfrm_del_sa(struct sk_buff *skb, struct nlmsghdr *nlh, void **xfrma)
        if (x == NULL)
                return -ESRCH;
 
-       if ((err = security_xfrm_state_delete(x)) != 0)
-               goto out;
-
        if (xfrm_state_kern(x)) {
-               err = -EPERM;
-               goto out;
+               xfrm_state_put(x);
+               return -EPERM;
        }
 
        err = xfrm_state_delete(x);
-       if (err < 0)
-               goto out;
+       if (err < 0) {
+               xfrm_state_put(x);
+               return err;
+       }
 
        c.seq = nlh->nlmsg_seq;
        c.pid = nlh->nlmsg_pid;
        c.event = nlh->nlmsg_type;
        km_state_notify(x, &c);
-
-out:
        xfrm_state_put(x);
+
        return err;
 }
 
@@ -1057,8 +1055,6 @@ static int xfrm_get_policy(struct sk_buff *skb, struct nlmsghdr *nlh, void **xfr
                                              MSG_DONTWAIT);
                }
        } else {
-               if ((err = security_xfrm_policy_delete(xp)) != 0)
-                       goto out;
                c.data.byid = p->index;
                c.event = nlh->nlmsg_type;
                c.seq = nlh->nlmsg_seq;
@@ -1068,7 +1064,6 @@ static int xfrm_get_policy(struct sk_buff *skb, struct nlmsghdr *nlh, void **xfr
 
        xfrm_pol_put(xp);
 
-out:
        return err;
 }
 
@@ -1435,7 +1430,7 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, int *err
        link = &xfrm_dispatch[type];
 
        /* All operations require privileges, even GET */
-       if (security_netlink_recv(skb, CAP_NET_ADMIN)) {
+       if (security_netlink_recv(skb)) {
                *errp = -EPERM;
                return -1;
        }