summaryrefslogtreecommitdiffstats
path: root/net/ipv6/ah6.c
diff options
context:
space:
mode:
authorHerbert Xu2007-10-18 06:35:15 +0200
committerDavid S. Miller2007-10-18 06:35:15 +0200
commitca68145f16359f71cd62b2671aa3e8c58f45ef19 (patch)
treedcd8806792a443cddc1c25f015d136a179c6882b /net/ipv6/ah6.c
parent[IPSEC]: Use the top IPv4 route's peer instead of the bottom (diff)
downloadkernel-qcow2-linux-ca68145f16359f71cd62b2671aa3e8c58f45ef19.tar.gz
kernel-qcow2-linux-ca68145f16359f71cd62b2671aa3e8c58f45ef19.tar.xz
kernel-qcow2-linux-ca68145f16359f71cd62b2671aa3e8c58f45ef19.zip
[IPSEC]: Disallow combinations of RO and AH/ESP/IPCOMP
Combining RO and AH/ESP/IPCOMP does not make sense. So this patch adds a check in the state initialisation function to prevent this. This allows us to safely remove the mode input function of RO since it can never be called anymore. Indeed, if somehow it does get called we'll know about it through an OOPS instead of it slipping past silently. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/ah6.c')
-rw-r--r--net/ipv6/ah6.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/net/ipv6/ah6.c b/net/ipv6/ah6.c
index a8221d1da0ff..67cd06613a25 100644
--- a/net/ipv6/ah6.c
+++ b/net/ipv6/ah6.c
@@ -477,8 +477,15 @@ static int ah6_init_state(struct xfrm_state *x)
x->props.header_len = XFRM_ALIGN8(sizeof(struct ip_auth_hdr) +
ahp->icv_trunc_len);
- if (x->props.mode == XFRM_MODE_TUNNEL)
+ switch (x->props.mode) {
+ case XFRM_MODE_BEET:
+ case XFRM_MODE_TRANSPORT:
+ break;
+ case XFRM_MODE_TUNNEL:
x->props.header_len += sizeof(struct ipv6hdr);
+ default:
+ goto error;
+ }
x->data = ahp;
return 0;