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!