From 9062d8e576f359d937a3210fe8f6d0669e7e24d5 Mon Sep 17 00:00:00 2001 From: Nick Altmann Date: Mon, 10 Feb 2025 14:37:31 +0100 Subject: [PATCH] Fix sqlops memory leak in sql_avp_load / sql_avp_delete / sql_avp_store --- modules/sqlops/sqlops.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/modules/sqlops/sqlops.c b/modules/sqlops/sqlops.c index 73a0b1f7bed..fe5d9f083cf 100644 --- a/modules/sqlops/sqlops.c +++ b/modules/sqlops/sqlops.c @@ -79,6 +79,7 @@ static int fixup_pvname_list(void** param); static int fixup_avpname_list(void** param); static int fixup_free_pvname_list(void** param); +static int fixup_free_avp_source(void** param); static int fixup_free_avp_dbparam(void** param); static int w_sql_avp_load(struct sip_msg* msg, void* source, @@ -136,7 +137,7 @@ static const cmd_export_t cmds[] = { {"sql_avp_load", (cmd_function)w_sql_avp_load, { {CMD_PARAM_STR|CMD_PARAM_NO_EXPAND, - fixup_sql_avp_source, fixup_free_pkg}, + fixup_sql_avp_source, fixup_free_avp_source}, {CMD_PARAM_STR|CMD_PARAM_NO_EXPAND, fixup_sql_avp_dbparam_scheme, fixup_free_avp_dbparam}, {CMD_PARAM_INT|CMD_PARAM_OPT, fixup_db_url, 0}, @@ -146,7 +147,7 @@ static const cmd_export_t cmds[] = { {"sql_avp_delete", (cmd_function)w_sql_avp_delete, { {CMD_PARAM_STR|CMD_PARAM_NO_EXPAND, - fixup_sql_avp_source, fixup_free_pkg}, + fixup_sql_avp_source, fixup_free_avp_source}, {CMD_PARAM_STR|CMD_PARAM_NO_EXPAND, fixup_sql_avp_dbparam, fixup_free_avp_dbparam}, {CMD_PARAM_INT|CMD_PARAM_OPT, fixup_db_url, 0}, @@ -155,7 +156,7 @@ static const cmd_export_t cmds[] = { {"sql_avp_store", (cmd_function)w_sql_avp_store, { {CMD_PARAM_STR|CMD_PARAM_NO_EXPAND, - fixup_sql_avp_source, fixup_free_pkg}, + fixup_sql_avp_source, fixup_free_avp_source}, {CMD_PARAM_STR|CMD_PARAM_NO_EXPAND, fixup_sql_avp_dbparam, fixup_free_avp_dbparam}, {CMD_PARAM_INT|CMD_PARAM_OPT, fixup_db_url, 0}, @@ -163,7 +164,6 @@ static const cmd_export_t cmds[] = { ALL_ROUTES}, {"sql_query", (cmd_function)w_sql_query, { - {CMD_PARAM_STR, 0, 0}, {CMD_PARAM_STR|CMD_PARAM_OPT|CMD_PARAM_NO_EXPAND, fixup_avpname_list, fixup_free_pvname_list}, {CMD_PARAM_INT|CMD_PARAM_OPT, @@ -544,6 +544,17 @@ static int fixup_sql_avp_dbparam(void** param) return fixup_sql_avp(param, 2, 0); } +static int fixup_free_avp_source(void** param) +{ + struct fis_param* sp = (struct fis_param*)*param; + + if ((sp->opd & SQLOPS_VAL_STR) && sp->u.s.s) { + pkg_free(sp->u.s.s); + } + pkg_free(sp); + return 0; +} + static int fixup_free_avp_dbparam(void** param) { struct db_param *dbp = (struct db_param *)*param;