[UDM] Fixed crash for invalid SUCI (#2571)

Modifications were made to resolve the following assertion..

Invalid HNET PKI Value [0] (../lib/sbi/conv.c:135)
ogs_supi_from_supi_or_suci: Expectation `supi' failed. (../lib/sbi/conv.c:262)
udm_ue_add: Assertion `udm_ue->supi' failed. (../src/udm/context.c:144)
backtrace() returned 8 addresses (../lib/core/ogs-abort.c:37)
This commit is contained in:
Sukchan Lee 2023-09-04 07:01:24 +09:00
parent d3a10ed0ca
commit 298fed260b
2 changed files with 33 additions and 6 deletions

View File

@ -132,7 +132,10 @@ udm_ue_t *udm_ue_add(char *suci)
ogs_assert(suci);
ogs_pool_alloc(&udm_ue_pool, &udm_ue);
ogs_assert(udm_ue);
if (!udm_ue) {
ogs_error("No memory pool [%s]", suci);
return NULL;
}
memset(udm_ue, 0, sizeof *udm_ue);
/* SBI Type */
@ -140,14 +143,30 @@ udm_ue_t *udm_ue_add(char *suci)
udm_ue->ctx_id = ogs_msprintf("%d",
(int)ogs_pool_index(&udm_ue_pool, udm_ue));
ogs_assert(udm_ue->ctx_id);
if (!udm_ue->ctx_id) {
ogs_error("No memory for udm_ue->ctx_id [%s]", suci);
ogs_pool_free(&udm_ue_pool, udm_ue);
return NULL;
}
udm_ue->suci = ogs_strdup(suci);
ogs_assert(udm_ue->suci);
ogs_hash_set(self.suci_hash, udm_ue->suci, strlen(udm_ue->suci), udm_ue);
if (!udm_ue->suci) {
ogs_error("No memory for udm_ue->suci [%s]", suci);
ogs_free(udm_ue->ctx_id);
ogs_pool_free(&udm_ue_pool, udm_ue);
return NULL;
}
udm_ue->supi = ogs_supi_from_supi_or_suci(udm_ue->suci);
ogs_assert(udm_ue->supi);
if (!udm_ue->supi) {
ogs_error("No memory for udm_ue->supi [%s]", suci);
ogs_free(udm_ue->suci);
ogs_free(udm_ue->ctx_id);
ogs_pool_free(&udm_ue_pool, udm_ue);
return NULL;
}
ogs_hash_set(self.suci_hash, udm_ue->suci, strlen(udm_ue->suci), udm_ue);
ogs_hash_set(self.supi_hash, udm_ue->supi, strlen(udm_ue->supi), udm_ue);
memset(&e, 0, sizeof(e));

View File

@ -163,7 +163,15 @@ void udm_state_operational(ogs_fsm_t *s, udm_event_t *e)
message.h.resource.component[0]);
if (!udm_ue) {
udm_ue = udm_ue_add(message.h.resource.component[0]);
ogs_assert(udm_ue);
if (!udm_ue) {
ogs_error("Invalid Request [%s]",
message.h.resource.component[0]);
ogs_assert(true ==
ogs_sbi_server_send_error(stream,
OGS_SBI_HTTP_STATUS_BAD_REQUEST,
&message, NULL, NULL));
break;
}
}
}