aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMasahide NAKAMURA <nakam@linux-ipv6.org>2006-09-28 01:21:52 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2006-09-28 21:02:49 -0400
commit7b4dc3600e4877178ba94c7fbf7e520421378aa6 (patch)
treece3d6601b8fd7748d3026a1aed042bba002ecac0
parent7fa6b06689085a3e2237cf810f5e0c114e00a2da (diff)
[XFRM]: Do not add a state whose SPI is zero to the SPI hash.
SPI=0 is used for acquired IPsec SA and MIPv6 RO state. Such state should not be added to the SPI hash because we do not care about it on deleting path. Signed-off-by: Masahide NAKAMURA <nakam@linux-ipv6.org> Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
-rw-r--r--net/xfrm/xfrm_state.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index fafe1ed5f56b..f927b7330f02 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -96,9 +96,12 @@ static void xfrm_hash_transfer(struct hlist_head *list,
96 nhashmask); 96 nhashmask);
97 hlist_add_head(&x->bysrc, nsrctable+h); 97 hlist_add_head(&x->bysrc, nsrctable+h);
98 98
99 h = __xfrm_spi_hash(&x->id.daddr, x->id.spi, x->id.proto, 99 if (x->id.spi) {
100 x->props.family, nhashmask); 100 h = __xfrm_spi_hash(&x->id.daddr, x->id.spi,
101 hlist_add_head(&x->byspi, nspitable+h); 101 x->id.proto, x->props.family,
102 nhashmask);
103 hlist_add_head(&x->byspi, nspitable+h);
104 }
102 } 105 }
103} 106}
104 107
@@ -622,7 +625,7 @@ static void __xfrm_state_insert(struct xfrm_state *x)
622 h = xfrm_src_hash(&x->props.saddr, x->props.family); 625 h = xfrm_src_hash(&x->props.saddr, x->props.family);
623 hlist_add_head(&x->bysrc, xfrm_state_bysrc+h); 626 hlist_add_head(&x->bysrc, xfrm_state_bysrc+h);
624 627
625 if (xfrm_id_proto_match(x->id.proto, IPSEC_PROTO_ANY)) { 628 if (x->id.spi) {
626 h = xfrm_spi_hash(&x->id.daddr, x->id.spi, x->id.proto, 629 h = xfrm_spi_hash(&x->id.daddr, x->id.spi, x->id.proto,
627 x->props.family); 630 x->props.family);
628 631