diff options
Diffstat (limited to 'net/xfrm/xfrm_policy.c')
-rw-r--r-- | net/xfrm/xfrm_policy.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 5e6b05ac1260..ae62054a9fc4 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) { |
@@ -995,13 +996,6 @@ int __xfrm_policy_check(struct sock *sk, int dir, struct sk_buff *skb, | |||
995 | struct sec_decap_state *xvec = &(skb->sp->x[i]); | 996 | struct sec_decap_state *xvec = &(skb->sp->x[i]); |
996 | if (!xfrm_selector_match(&xvec->xvec->sel, &fl, family)) | 997 | if (!xfrm_selector_match(&xvec->xvec->sel, &fl, family)) |
997 | return 0; | 998 | return 0; |
998 | |||
999 | /* If there is a post_input processor, try running it */ | ||
1000 | if (xvec->xvec->type->post_input && | ||
1001 | (xvec->xvec->type->post_input)(xvec->xvec, | ||
1002 | &(xvec->decap), | ||
1003 | skb) != 0) | ||
1004 | return 0; | ||
1005 | } | 999 | } |
1006 | } | 1000 | } |
1007 | 1001 | ||