forked from acouzens/open5gs
[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:
parent
d3a10ed0ca
commit
298fed260b
|
@ -132,7 +132,10 @@ udm_ue_t *udm_ue_add(char *suci)
|
||||||
ogs_assert(suci);
|
ogs_assert(suci);
|
||||||
|
|
||||||
ogs_pool_alloc(&udm_ue_pool, &udm_ue);
|
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);
|
memset(udm_ue, 0, sizeof *udm_ue);
|
||||||
|
|
||||||
/* SBI Type */
|
/* SBI Type */
|
||||||
|
@ -140,14 +143,30 @@ udm_ue_t *udm_ue_add(char *suci)
|
||||||
|
|
||||||
udm_ue->ctx_id = ogs_msprintf("%d",
|
udm_ue->ctx_id = ogs_msprintf("%d",
|
||||||
(int)ogs_pool_index(&udm_ue_pool, udm_ue));
|
(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);
|
udm_ue->suci = ogs_strdup(suci);
|
||||||
ogs_assert(udm_ue->suci);
|
if (!udm_ue->suci) {
|
||||||
ogs_hash_set(self.suci_hash, udm_ue->suci, strlen(udm_ue->suci), udm_ue);
|
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);
|
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);
|
ogs_hash_set(self.supi_hash, udm_ue->supi, strlen(udm_ue->supi), udm_ue);
|
||||||
|
|
||||||
memset(&e, 0, sizeof(e));
|
memset(&e, 0, sizeof(e));
|
||||||
|
|
|
@ -163,7 +163,15 @@ void udm_state_operational(ogs_fsm_t *s, udm_event_t *e)
|
||||||
message.h.resource.component[0]);
|
message.h.resource.component[0]);
|
||||||
if (!udm_ue) {
|
if (!udm_ue) {
|
||||||
udm_ue = udm_ue_add(message.h.resource.component[0]);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue