diff options
Diffstat (limited to 'net/xfrm')
| -rw-r--r-- | net/xfrm/xfrm_policy.c | 7 | ||||
| -rw-r--r-- | net/xfrm/xfrm_state.c | 8 | ||||
| -rw-r--r-- | net/xfrm/xfrm_user.c | 2 |
3 files changed, 9 insertions, 8 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 5e6b05ac1260..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) { |
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 | ||
