]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
load-tester: Fix race condition issuing same SPI
authorChristophe Gouault <christophe.gouault@6wind.com>
Tue, 8 Apr 2014 15:11:14 +0000 (17:11 +0200)
committerTobias Brunner <tobias@strongswan.org>
Thu, 24 Apr 2014 15:54:15 +0000 (17:54 +0200)
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>
src/libcharon/plugins/load_tester/load_tester_ipsec.c

index 02b1d42165b4171aecbaa05633a4900d80d31900..5edd3b82d6abc7893c49368fd740f2eb58da5dc5 100644 (file)
@@ -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;
 }