]> git.hungrycats.org Git - linux/commitdiff
[IPSEC]: Fix accidental too many ref drops on policies.
authorHerbert Xu <herbert@gondor.apana.org.au>
Sun, 26 Oct 2003 19:29:16 +0000 (11:29 -0800)
committerDavid S. Miller <davem@nuts.ninka.net>
Sun, 26 Oct 2003 19:29:16 +0000 (11:29 -0800)
net/xfrm/xfrm_policy.c
net/xfrm/xfrm_state.c

index f2bfc4c2e0728a7d348de5d534a7ec2c40ba60b4..85f626d20c4a2612b9f8703465edaffd75484964 100644 (file)
@@ -519,7 +519,6 @@ static struct xfrm_policy *__xfrm_policy_unlink(struct xfrm_policy *pol,
             *polp != NULL; polp = &(*polp)->next) {
                if (*polp == pol) {
                        *polp = pol->next;
-                       atomic_dec(&pol->refcnt);
                        return pol;
                }
        }
@@ -574,6 +573,7 @@ static struct xfrm_policy *clone_policy(struct xfrm_policy *old, int dir)
                write_lock_bh(&xfrm_policy_lock);
                __xfrm_policy_link(newp, XFRM_POLICY_MAX+dir);
                write_unlock_bh(&xfrm_policy_lock);
+               xfrm_pol_put(newp);
        }
        return newp;
 }
index eaa6104005f7d470c818ef4d7264f220fecab3c9..ab1c1ec1aa12bef226ddafcb340fcc217767db99 100644 (file)
@@ -831,6 +831,7 @@ int xfrm_user_policy(struct sock *sk, int optname, u8 *optval, int optlen)
 
        if (err >= 0) {
                xfrm_sk_policy_insert(sk, err, pol);
+               xfrm_pol_put(pol);
                err = 0;
        }