aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristophe Gouault <christophe.gouault@6wind.com>2014-04-08 17:11:14 +0200
committerTobias Brunner <tobias@strongswan.org>2014-04-24 17:54:15 +0200
commit7b08063e70d916b16f1de2dba22110a92f7ff598 (patch)
treeee68d1dde1a78f0aa6f7d0965ec1bd04b9274c02
parent2cbaa632951dd662e26e63299d8049c0d2bed8b1 (diff)
downloadstrongswan-7b08063e70d916b16f1de2dba22110a92f7ff598.tar.bz2
strongswan-7b08063e70d916b16f1de2dba22110a92f7ff598.tar.xz
load-tester: Fix race condition issuing same SPI
Due to an unprotected incrementation, two load-tester initiators occasionally use the same SPI under high load, and hence generate 2 IPsec SAs with the same identifier. The responder IPsec stack will refuse to configure the second SA. Use an atomic incrementation to avoid this race condition. Signed-off-by: Christophe Gouault <christophe.gouault@6wind.com>
-rw-r--r--src/libcharon/plugins/load_tester/load_tester_ipsec.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/libcharon/plugins/load_tester/load_tester_ipsec.c b/src/libcharon/plugins/load_tester/load_tester_ipsec.c
index 02b1d4216..5edd3b82d 100644
--- a/src/libcharon/plugins/load_tester/load_tester_ipsec.c
+++ b/src/libcharon/plugins/load_tester/load_tester_ipsec.c
@@ -31,14 +31,14 @@ struct private_load_tester_ipsec_t {
/**
* faked SPI counter
*/
- u_int32_t spi;
+ refcount_t spi;
};
METHOD(kernel_ipsec_t, get_spi, status_t,
private_load_tester_ipsec_t *this, host_t *src, host_t *dst,
u_int8_t protocol, u_int32_t reqid, u_int32_t *spi)
{
- *spi = ++this->spi;
+ *spi = (uint32_t)ref_get(&this->spi);
return SUCCESS;
}