From 6968f1df9e9d3d66810df910d290f3d9368255fe Mon Sep 17 00:00:00 2001 From: Riccardo Villa Date: Wed, 24 Feb 2021 09:52:59 +0100 Subject: [PATCH 1/4] ims_diameter_server: check response is not null before json conversion --- src/modules/ims_diameter_server/ims_diameter_server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/ims_diameter_server/ims_diameter_server.c b/src/modules/ims_diameter_server/ims_diameter_server.c index c7fe941b001..62b8c3add8b 100644 --- a/src/modules/ims_diameter_server/ims_diameter_server.c +++ b/src/modules/ims_diameter_server/ims_diameter_server.c @@ -322,7 +322,7 @@ int diameter_request(struct sip_msg * msg, char* peer, char* appid, char* comman } else { resp = cdpb.AAASendRecvMessageToPeer(req, &s_peer); LM_DBG("Successfully sent diameter\n"); - if (AAAmsg2json(resp, &responsejson) == 1) { + if (resp && AAAmsg2json(resp, &responsejson) == 1) { return 1; } else { LM_ERR("Failed to convert response to JSON\n"); @@ -337,7 +337,7 @@ int diameter_request(struct sip_msg * msg, char* peer, char* appid, char* comman } else { resp = cdpb.AAASendRecvMessage(req); LM_DBG("Successfully sent diameter\n"); - if (AAAmsg2json(resp, &responsejson) == 1) { + if (resp && AAAmsg2json(resp, &responsejson) == 1) { return 1; } else { LM_ERR("Failed to convert response to JSON\n"); From faf1edabf732af5a24ad0399098ad11e27b3a1ab Mon Sep 17 00:00:00 2001 From: Riccardo Villa Date: Wed, 24 Feb 2021 09:54:47 +0100 Subject: [PATCH 2/4] ims_diameter_server: fix initialization of s_message --- src/modules/ims_diameter_server/ims_diameter_server.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/ims_diameter_server/ims_diameter_server.c b/src/modules/ims_diameter_server/ims_diameter_server.c index 62b8c3add8b..7266f655c65 100644 --- a/src/modules/ims_diameter_server/ims_diameter_server.c +++ b/src/modules/ims_diameter_server/ims_diameter_server.c @@ -280,6 +280,10 @@ int diameter_request(struct sip_msg * msg, char* peer, char* appid, char* comman } LM_DBG("Peer %.*s\n", s_peer.len, s_peer.s); } + if (get_str_fparam(&s_message, msg, (fparam_t*)message) < 0) { + LM_ERR("failed to get Message\n"); + return -1; + } if (get_str_fparam(&s_appid, msg, (fparam_t*)appid) < 0) { LM_ERR("failed to get App-ID\n"); return -1; From 84c342277f2a73196cb377476f2b80e6b4085e7b Mon Sep 17 00:00:00 2001 From: Riccardo Villa Date: Wed, 24 Feb 2021 09:55:46 +0100 Subject: [PATCH 3/4] ims_diameter_server: drop cdp session to avoid deadlock --- src/modules/ims_diameter_server/ims_diameter_server.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/modules/ims_diameter_server/ims_diameter_server.c b/src/modules/ims_diameter_server/ims_diameter_server.c index 7266f655c65..5b69c8973c4 100644 --- a/src/modules/ims_diameter_server/ims_diameter_server.c +++ b/src/modules/ims_diameter_server/ims_diameter_server.c @@ -310,6 +310,11 @@ int diameter_request(struct sip_msg * msg, char* peer, char* appid, char* comman session = cdpb.AAACreateSession(0); req = cdpb.AAACreateRequest(i_appid, i_commandcode, Flag_Proxyable, session); + if (session) { + cdpb.AAADropSession(session); + session = 0; + } + if (!req) goto error1; if (addAVPsfromJSON(req, &s_message)) { From 88d38bd306f595585af6e972ac529b40d7a93b58 Mon Sep 17 00:00:00 2001 From: Riccardo Villa Date: Wed, 24 Feb 2021 09:56:44 +0100 Subject: [PATCH 4/4] ims_diameter_server: fix check for addAVPsfromJSON return code --- src/modules/ims_diameter_server/ims_diameter_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/ims_diameter_server/ims_diameter_server.c b/src/modules/ims_diameter_server/ims_diameter_server.c index 5b69c8973c4..fae5f58ce9a 100644 --- a/src/modules/ims_diameter_server/ims_diameter_server.c +++ b/src/modules/ims_diameter_server/ims_diameter_server.c @@ -317,7 +317,7 @@ int diameter_request(struct sip_msg * msg, char* peer, char* appid, char* comman if (!req) goto error1; - if (addAVPsfromJSON(req, &s_message)) { + if (!addAVPsfromJSON(req, &s_message)) { LM_ERR("Failed to parse JSON Request\n"); return -1; }