Module: kamailio
Branch: master
Commit: c362531c5dccc3ed674247c18bac65c224385108
URL: 
https://github.com/kamailio/kamailio/commit/c362531c5dccc3ed674247c18bac65c224385108

Author: Victor Seva <linuxman...@torreviejawireless.org>
Committer: Victor Seva <linuxman...@torreviejawireless.org>
Date: 2025-07-29T11:25:22+02:00

ims_ipsec_pcscf: ipsec_reconfig() fix logic

reconfig should only happen once. Before, if more than one
REGISTER was processed when there are no contacts, the process
could be triggered more than once.

---

Modified: src/modules/ims_ipsec_pcscf/cmd.c
Modified: src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/c362531c5dccc3ed674247c18bac65c224385108.diff
Patch: 
https://github.com/kamailio/kamailio/commit/c362531c5dccc3ed674247c18bac65c224385108.patch

---

diff --git a/src/modules/ims_ipsec_pcscf/cmd.c 
b/src/modules/ims_ipsec_pcscf/cmd.c
index 4271e9c519d..c9fb6293ea1 100644
--- a/src/modules/ims_ipsec_pcscf/cmd.c
+++ b/src/modules/ims_ipsec_pcscf/cmd.c
@@ -69,6 +69,7 @@ extern ip_addr_t ipsec_listen_ip_addr6;
 
 extern int spi_id_start;
 
+extern atomic_t *ipsec_reconfig_flag;
 extern unsigned int ipsec_init_flag;
 
 // check http://www.asipto.com/pub/kamailio-devel-guide/#c16return_values
@@ -1374,15 +1375,25 @@ int ipsec_destroy_by_contact(
 
 int ipsec_reconfig()
 {
+       int ret;
+
        if(ul.get_number_of_contacts() != 0) {
                return 0;
        }
 
+       if(atomic_get(ipsec_reconfig_flag) != 0) {
+               LM_DBG("reconfig already called\n");
+               return 0;
+       }
+       atomic_set(ipsec_reconfig_flag, 1);
+
        if(clean_spi_list() != 0) {
                return 1;
        }
 
-       return ipsec_cleanall();
+       ret = ipsec_cleanall();
+       atomic_set(ipsec_reconfig_flag, 0);
+       return ret;
 }
 
 int ipsec_cleanall()
diff --git a/src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c 
b/src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c
index 72bd381a587..0f1700a55d3 100644
--- a/src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c
+++ b/src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c
@@ -24,6 +24,7 @@
  *
  */
 
+#include "../../core/atomic_ops.h"
 #include "../../core/sr_module.h"
 #include "../../core/mod_fix.h"
 #include "../../modules/tm/tm_load.h"
@@ -75,6 +76,7 @@ static int unregister_fixup_free(void **param, int param_no);
 extern int bind_ipsec_pcscf(usrloc_api_t *api);
 
 unsigned int ipsec_init_flag = 0;
+atomic_t *ipsec_reconfig_flag = NULL;
 
 /* clang-format off */
 
@@ -407,6 +409,11 @@ static int mod_init(void)
                return -1;
        }
 
+       if((ipsec_reconfig_flag = shm_malloc(sizeof(atomic_t))) == NULL) {
+               SHM_MEM_ERROR;
+               return -1;
+       }
+       atomic_set(ipsec_reconfig_flag, 0);
        ipsec_init_flag = 1;
 
        return 0;
@@ -421,6 +428,10 @@ static void mod_destroy(void)
        if(destroy_spi_gen() != 0) {
                LM_ERR("Error destroying spi generator\n");
        }
+
+       if(ipsec_reconfig_flag) {
+               shm_free(ipsec_reconfig_flag);
+       }
 }
 
 static int child_init(int rank)

_______________________________________________
Kamailio - Development Mailing List -- sr-dev@lists.kamailio.org
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the 
sender!

Reply via email to