add safety check to prevent segfault when dealing with DMRS mapping type for DLSCH and ULSCH (#1019)
This commit is contained in:
@@ -843,10 +843,23 @@ static int nr_ue_process_dci_dl_10(NR_UE_MAC_INST_t *mac,
|
||||
dlsch_pdu->number_symbols = tda_info.nrOfSymbols;
|
||||
dlsch_pdu->start_symbol = tda_info.startSymbolIndex;
|
||||
|
||||
struct NR_DMRS_DownlinkConfig *dl_dmrs_config = NULL;
|
||||
if (pdsch_config)
|
||||
dl_dmrs_config = (tda_info.mapping_type == typeA) ? pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup
|
||||
: pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup;
|
||||
mappingType_t type = tda_info.mapping_type;
|
||||
NR_DMRS_DownlinkConfig_t *dl_dmrs_config = NULL;
|
||||
if (pdsch_config) {
|
||||
if (type == typeA) {
|
||||
if (!pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA) {
|
||||
LOG_E(MAC, "Invalid PDSCH DMRS configuration, expected typeA but not configured\n");
|
||||
return -1;
|
||||
} else
|
||||
dl_dmrs_config = pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
||||
} else { // typeB
|
||||
if (!pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeB) {
|
||||
LOG_E(MAC, "Invalid PDSCH DMRS configuration, expected typeB but not configured\n");
|
||||
return -1;
|
||||
} else
|
||||
dl_dmrs_config = pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup;
|
||||
}
|
||||
}
|
||||
|
||||
dlsch_pdu->nscid = 0;
|
||||
if (dl_dmrs_config && dl_dmrs_config->scramblingID0)
|
||||
@@ -1184,9 +1197,23 @@ static int nr_ue_process_dci_dl_11(NR_UE_MAC_INST_t *mac,
|
||||
dlsch_pdu->number_symbols = tda_info.nrOfSymbols;
|
||||
dlsch_pdu->start_symbol = tda_info.startSymbolIndex;
|
||||
|
||||
struct NR_DMRS_DownlinkConfig *dl_dmrs_config = (tda_info.mapping_type == typeA)
|
||||
? pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup
|
||||
: pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup;
|
||||
mappingType_t type = tda_info.mapping_type;
|
||||
NR_DMRS_DownlinkConfig_t *dl_dmrs_config = NULL;
|
||||
if (pdsch_Config) {
|
||||
if (type == typeA) {
|
||||
if (!pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA) {
|
||||
LOG_E(MAC, "Invalid PDSCH DMRS configuration, expected typeA but not configured\n");
|
||||
return -1;
|
||||
} else
|
||||
dl_dmrs_config = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
|
||||
} else { // typeB
|
||||
if (!pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB) {
|
||||
LOG_E(MAC, "Invalid PDSCH DMRS configuration, expected typeB but not configured\n");
|
||||
return -1;
|
||||
} else
|
||||
dl_dmrs_config = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup;
|
||||
}
|
||||
}
|
||||
|
||||
switch (dci->dmrs_sequence_initialization.val) {
|
||||
case 0:
|
||||
@@ -1417,9 +1444,9 @@ static int nr_ue_process_dci_dl_11(NR_UE_MAC_INST_t *mac,
|
||||
dlsch_pdu->tbslbrm = nr_compute_tbslbrm(dlsch_pdu->mcs_table, sc_info->dl_bw_tbslbrm, nl_tbslbrm);
|
||||
/*PTRS configuration */
|
||||
dlsch_pdu->pduBitmap = 0;
|
||||
if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS != NULL) {
|
||||
if (dl_dmrs_config->phaseTrackingRS != NULL) {
|
||||
bool valid_ptrs_setup =
|
||||
set_dl_ptrs_values(pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup,
|
||||
set_dl_ptrs_values(dl_dmrs_config->phaseTrackingRS->choice.setup,
|
||||
dlsch_pdu->number_rbs,
|
||||
dlsch_pdu->mcs,
|
||||
dlsch_pdu->mcs_table,
|
||||
|
||||
@@ -598,12 +598,21 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
|
||||
}
|
||||
|
||||
int mappingtype = tda_info->mapping_type;
|
||||
|
||||
NR_DMRS_UplinkConfig_t *NR_DMRS_ulconfig = NULL;
|
||||
if(pusch_Config) {
|
||||
NR_DMRS_ulconfig = (mappingtype == NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeA)
|
||||
? pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup
|
||||
: pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
||||
if (pusch_Config) {
|
||||
if (mappingtype == NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeA) {
|
||||
if (!pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA) {
|
||||
LOG_E(MAC, "Invalid PUSCH DMRS configuration, expected typeA but not configured\n");
|
||||
return -1;
|
||||
} else
|
||||
NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup;
|
||||
} else { // typeB
|
||||
if (!pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB) {
|
||||
LOG_E(MAC, "Invalid PDSCH DMRS configuration, expected typeB but not configured\n");
|
||||
return -1;
|
||||
} else
|
||||
NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
|
||||
}
|
||||
}
|
||||
|
||||
pusch_config_pdu->scid = 0;
|
||||
|
||||
Reference in New Issue
Block a user