Due to an unprotected incrementation, two load-tester initiators occasionally
use the same identifier under high load. The responder typically drops one of
the connections.

Use an atomic incrementation to avoid this race condition.

Signed-off-by: Christophe Gouault <[email protected]>
---
 src/libcharon/plugins/load_tester/load_tester_config.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/libcharon/plugins/load_tester/load_tester_config.c 
b/src/libcharon/plugins/load_tester/load_tester_config.c
index e133190..b627a12 100644
--- a/src/libcharon/plugins/load_tester/load_tester_config.c
+++ b/src/libcharon/plugins/load_tester/load_tester_config.c
@@ -150,7 +150,7 @@ struct private_load_tester_config_t {
        /**
         * incremental numbering of generated configs
         */
-       u_int num;
+       refcount_t num;
 
        /**
         * Dynamic source port, if used
@@ -802,7 +802,7 @@ METHOD(backend_t, get_peer_cfg_by_name, peer_cfg_t*,
 {
        if (streq(name, "load-test"))
        {
-               return generate_config(this, this->num++);
+               return generate_config(this, ref_get(&this->num));
        }
        return NULL;
 }
-- 
1.7.10.4

_______________________________________________
Dev mailing list
[email protected]
https://lists.strongswan.org/mailman/listinfo/dev

Reply via email to