summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2007-07-31 02:04:32 -0700
committerDavid S. Miller <davem@sunset.davemloft.net>2007-07-31 02:28:32 -0700
commit196b003620f1ee8d0fc63f13f341187d63c1dc0a (patch)
tree2710ea74dab44caa9d3405fc6d95a2663f253f16
parentb8ed601cefe7a4014b93560bd846caf44f25b1c1 (diff)
downloadlinux-3.10-196b003620f1ee8d0fc63f13f341187d63c1dc0a.tar.gz
linux-3.10-196b003620f1ee8d0fc63f13f341187d63c1dc0a.tar.bz2
linux-3.10-196b003620f1ee8d0fc63f13f341187d63c1dc0a.zip
[IPSEC]: Ensure that state inner family is set
Similar to the issue we had with template families which specified the inner families of policies, we need to set the inner families of states as the main xfrm user Openswan leaves it as zero. af_key is unaffected because the inner family is set by it and not the KM. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/xfrm/xfrm_user.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index c06883bf620..61339e17a0f 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -322,6 +322,13 @@ static void copy_from_user_state(struct xfrm_state *x, struct xfrm_usersa_info *
x->props.family = p->family;
memcpy(&x->props.saddr, &p->saddr, sizeof(x->props.saddr));
x->props.flags = p->flags;
+
+ /*
+ * Set inner address family if the KM left it as zero.
+ * See comment in validate_tmpl.
+ */
+ if (!x->sel.family)
+ x->sel.family = p->family;
}
/*