Module: kamailio Branch: 5.8 Commit: 919575634674a85dce1f28c3dc31f3952c357524 URL: https://github.com/kamailio/kamailio/commit/919575634674a85dce1f28c3dc31f395...
Author: Victor Seva linuxmaniac@torreviejawireless.org Committer: Victor Seva linuxmaniac@torreviejawireless.org Date: 2025-07-29T11:35:38+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.
(cherry picked from commit c362531c5dccc3ed674247c18bac65c224385108) (cherry picked from commit 4c6485235ab6a66e45ab20be731dd4f220e36e44)
---
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/919575634674a85dce1f28c3dc31f395... Patch: https://github.com/kamailio/kamailio/commit/919575634674a85dce1f28c3dc31f395...
---
diff --git a/src/modules/ims_ipsec_pcscf/cmd.c b/src/modules/ims_ipsec_pcscf/cmd.c index c7481cf5c9e..8b6f728cc23 100644 --- a/src/modules/ims_ipsec_pcscf/cmd.c +++ b/src/modules/ims_ipsec_pcscf/cmd.c @@ -67,6 +67,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 @@ -1373,15 +1374,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 7c6c529c942..55bcaa27a89 100644 --- a/src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c +++ b/src/modules/ims_ipsec_pcscf/ims_ipsec_pcscf_mod.c @@ -22,6 +22,7 @@ * */
+#include "../../core/atomic_ops.h" #include "../../core/sr_module.h" #include "../../core/mod_fix.h" #include "../../modules/tm/tm_load.h" @@ -71,6 +72,7 @@ static int unregister2_fixup(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 */
@@ -377,6 +379,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; @@ -391,6 +398,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)