Module: kamailio Branch: master Commit: c362531c5dccc3ed674247c18bac65c224385108 URL: https://github.com/kamailio/kamailio/commit/c362531c5dccc3ed674247c18bac65c2...
Author: Victor Seva linuxmaniac@torreviejawireless.org Committer: Victor Seva linuxmaniac@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/c362531c5dccc3ed674247c18bac65c2... Patch: https://github.com/kamailio/kamailio/commit/c362531c5dccc3ed674247c18bac65c2...
---
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)