From 30054b809e9b77d616d6a19e051334443ba2b0eb Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 14 Oct 2024 18:46:37 +0200 Subject: [PATCH] Handle faulty MeasurementReport gracefully A UE might send a MeasurementReport without the actual IEs present (intentionally or not). Check this and handle appropriately to avoid assertion Assertion (measurementReport->criticalExtensions.present == NR_MeasurementReport__criticalExtensions_PR_measurementReport && measurementReport->criticalExtensions.choice.measurementReport != ((void*)0)) failed! In rrc_gNB_process_MeasurementReport() ../../../openair2/RRC/NR/rrc_gNB.c Closes: #859 --- openair2/RRC/NR/rrc_gNB.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index cce409d302..580977ef90 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -1302,17 +1302,20 @@ static void process_Event_Based_Measurement_Report(NR_ReportConfigNR_t *report, static void rrc_gNB_process_MeasurementReport(rrc_gNB_ue_context_t *ue_context, NR_MeasurementReport_t *measurementReport) { - LOG_D(NR_RRC, "Process Measurement Report\n"); + gNB_RRC_UE_t *UE = &ue_context->ue_context; + NR_MeasurementReport__criticalExtensions_PR p = measurementReport->criticalExtensions.present; + if (p != NR_MeasurementReport__criticalExtensions_PR_measurementReport + || measurementReport->criticalExtensions.choice.measurementReport == NULL) { + LOG_E(NR_RRC, "UE %d: expected presence of MeasurementReport, but has %d (%p)\n", UE->rrc_ue_id, p, measurementReport->criticalExtensions.choice.measurementReport); + return; + } + if (LOG_DEBUGFLAG(DEBUG_ASN1)) xer_fprint(stdout, &asn_DEF_NR_MeasurementReport, (void *)measurementReport); - DevAssert(measurementReport->criticalExtensions.present == NR_MeasurementReport__criticalExtensions_PR_measurementReport - && measurementReport->criticalExtensions.choice.measurementReport != NULL); - - gNB_RRC_UE_t *ue_ctxt = &ue_context->ue_context; - NR_MeasConfig_t *meas_config = ue_ctxt->measConfig; + NR_MeasConfig_t *meas_config = UE->measConfig; if (meas_config == NULL) { - LOG_I(NR_RRC, "Unexpected Measurement Report from UE with id: %d\n", ue_ctxt->rrc_ue_id); + LOG_I(NR_RRC, "Unexpected Measurement Report from UE with id: %d\n", UE->rrc_ue_id); return; }