diff options
Diffstat (limited to 'net/xfrm')
-rw-r--r-- | net/xfrm/xfrm_policy.c | 9 | ||||
-rw-r--r-- | net/xfrm/xfrm_state.c | 8 | ||||
-rw-r--r-- | net/xfrm/xfrm_user.c | 2 |
3 files changed, 9 insertions, 10 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 98ec53bd3ac7..8206025d8e46 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c | |||
@@ -782,7 +782,7 @@ int xfrm_lookup(struct dst_entry **dst_p, struct flowi *fl, | |||
782 | int nx = 0; | 782 | int nx = 0; |
783 | int err; | 783 | int err; |
784 | u32 genid; | 784 | u32 genid; |
785 | u16 family = dst_orig->ops->family; | 785 | u16 family; |
786 | u8 dir = policy_to_flow_dir(XFRM_POLICY_OUT); | 786 | u8 dir = policy_to_flow_dir(XFRM_POLICY_OUT); |
787 | u32 sk_sid = security_sk_sid(sk, fl, dir); | 787 | u32 sk_sid = security_sk_sid(sk, fl, dir); |
788 | restart: | 788 | restart: |
@@ -796,13 +796,14 @@ restart: | |||
796 | if ((dst_orig->flags & DST_NOXFRM) || !xfrm_policy_list[XFRM_POLICY_OUT]) | 796 | if ((dst_orig->flags & DST_NOXFRM) || !xfrm_policy_list[XFRM_POLICY_OUT]) |
797 | return 0; | 797 | return 0; |
798 | 798 | ||
799 | policy = flow_cache_lookup(fl, sk_sid, family, dir, | 799 | policy = flow_cache_lookup(fl, sk_sid, dst_orig->ops->family, |
800 | xfrm_policy_lookup); | 800 | dir, xfrm_policy_lookup); |
801 | } | 801 | } |
802 | 802 | ||
803 | if (!policy) | 803 | if (!policy) |
804 | return 0; | 804 | return 0; |
805 | 805 | ||
806 | family = dst_orig->ops->family; | ||
806 | policy->curlft.use_time = (unsigned long)xtime.tv_sec; | 807 | policy->curlft.use_time = (unsigned long)xtime.tv_sec; |
807 | 808 | ||
808 | switch (policy->action) { | 809 | switch (policy->action) { |
@@ -885,8 +886,6 @@ restart: | |||
885 | * We can't enlist stable bundles either. | 886 | * We can't enlist stable bundles either. |
886 | */ | 887 | */ |
887 | write_unlock_bh(&policy->lock); | 888 | write_unlock_bh(&policy->lock); |
888 | |||
889 | xfrm_pol_put(policy); | ||
890 | if (dst) | 889 | if (dst) |
891 | dst_free(dst); | 890 | dst_free(dst); |
892 | 891 | ||
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index e12d0be5f976..c656cbaf35e8 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c | |||
@@ -220,14 +220,14 @@ static int __xfrm_state_delete(struct xfrm_state *x) | |||
220 | x->km.state = XFRM_STATE_DEAD; | 220 | x->km.state = XFRM_STATE_DEAD; |
221 | spin_lock(&xfrm_state_lock); | 221 | spin_lock(&xfrm_state_lock); |
222 | list_del(&x->bydst); | 222 | list_del(&x->bydst); |
223 | atomic_dec(&x->refcnt); | 223 | __xfrm_state_put(x); |
224 | if (x->id.spi) { | 224 | if (x->id.spi) { |
225 | list_del(&x->byspi); | 225 | list_del(&x->byspi); |
226 | atomic_dec(&x->refcnt); | 226 | __xfrm_state_put(x); |
227 | } | 227 | } |
228 | spin_unlock(&xfrm_state_lock); | 228 | spin_unlock(&xfrm_state_lock); |
229 | if (del_timer(&x->timer)) | 229 | if (del_timer(&x->timer)) |
230 | atomic_dec(&x->refcnt); | 230 | __xfrm_state_put(x); |
231 | 231 | ||
232 | /* The number two in this test is the reference | 232 | /* The number two in this test is the reference |
233 | * mentioned in the comment below plus the reference | 233 | * mentioned in the comment below plus the reference |
@@ -243,7 +243,7 @@ static int __xfrm_state_delete(struct xfrm_state *x) | |||
243 | * The xfrm_state_alloc call gives a reference, and that | 243 | * The xfrm_state_alloc call gives a reference, and that |
244 | * is what we are dropping here. | 244 | * is what we are dropping here. |
245 | */ | 245 | */ |
246 | atomic_dec(&x->refcnt); | 246 | __xfrm_state_put(x); |
247 | err = 0; | 247 | err = 0; |
248 | } | 248 | } |
249 | 249 | ||
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c index ac87a09ba83e..7de17559249a 100644 --- a/net/xfrm/xfrm_user.c +++ b/net/xfrm/xfrm_user.c | |||
@@ -345,7 +345,7 @@ static int xfrm_add_sa(struct sk_buff *skb, struct nlmsghdr *nlh, void **xfrma) | |||
345 | 345 | ||
346 | if (err < 0) { | 346 | if (err < 0) { |
347 | x->km.state = XFRM_STATE_DEAD; | 347 | x->km.state = XFRM_STATE_DEAD; |
348 | xfrm_state_put(x); | 348 | __xfrm_state_put(x); |
349 | goto out; | 349 | goto out; |
350 | } | 350 | } |
351 | 351 | ||