diff options
| author | Randy Dunlap <randy.dunlap@oracle.com> | 2011-05-20 09:10:04 -0700 |
|---|---|---|
| committer | Randy Dunlap <randy.dunlap@oracle.com> | 2011-05-20 09:10:04 -0700 |
| commit | 2f3e4af471e38e0658e701973238ae4b5e50fcd6 (patch) | |
| tree | fbfc99c0d975e38ff80f4ff3239a9fc0567b8a4d /net/xfrm/xfrm_policy.c | |
| parent | 61516587513c84ac26e68e3ab008dc6e965d0378 (diff) | |
| parent | d410fa4ef99112386de5f218dd7df7b4fca910b4 (diff) | |
| download | kernel_samsung_smdk4412-2f3e4af471e38e0658e701973238ae4b5e50fcd6.tar.gz kernel_samsung_smdk4412-2f3e4af471e38e0658e701973238ae4b5e50fcd6.tar.bz2 kernel_samsung_smdk4412-2f3e4af471e38e0658e701973238ae4b5e50fcd6.zip | |
Merge branch 'docs-security' into docs-move
Diffstat (limited to 'net/xfrm/xfrm_policy.c')
| -rw-r--r-- | net/xfrm/xfrm_policy.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 15792d8b627..b4d745ea8ee 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -1406,6 +1406,7 @@ static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy, struct net *net = xp_net(policy); unsigned long now = jiffies; struct net_device *dev; + struct xfrm_mode *inner_mode; struct dst_entry *dst_prev = NULL; struct dst_entry *dst0 = NULL; int i = 0; @@ -1436,6 +1437,17 @@ static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy, goto put_states; } + if (xfrm[i]->sel.family == AF_UNSPEC) { + inner_mode = xfrm_ip2inner_mode(xfrm[i], + xfrm_af2proto(family)); + if (!inner_mode) { + err = -EAFNOSUPPORT; + dst_release(dst); + goto put_states; + } + } else + inner_mode = xfrm[i]->inner_mode; + if (!dst_prev) dst0 = dst1; else { @@ -1464,7 +1476,7 @@ static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy, dst1->lastuse = now; dst1->input = dst_discard; - dst1->output = xfrm[i]->outer_mode->afinfo->output; + dst1->output = inner_mode->afinfo->output; dst1->next = dst_prev; dst_prev = dst1; |
