From a049c53e99df1bd4714423f2b693937dcca012b2 Mon Sep 17 00:00:00 2001 From: "Badescu, Ciprian" Date: Wed, 11 Dec 2024 03:56:16 +0200 Subject: [PATCH] better handling of writeBlockSize greater than samples/slot fix the case when writeBlockSize is greater than samples/slot by sending samples from the same buffer instead of out-of-bounds memory read --- executables/nr-ue.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index d892bff9e5..9e5347e957 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -483,11 +483,23 @@ static void RU_write(nr_rxtx_thread_data_t *rxtxD, bool sl_tx_action) } } - int tmp = openair0_write_reorder(&UE->rfdevice, proc->timestamp_tx, txp, rxtxD->writeBlockSize, fp->nb_antennas_tx, flags); - AssertFatal(tmp == rxtxD->writeBlockSize, ""); + openair0_timestamp writeTimestamp = proc->timestamp_tx; + int writeBlockSize = rxtxD->writeBlockSize; + if ( writeBlockSize > fp->get_samples_per_slot(proc->nr_slot_tx, fp)) { + // if writeBlockSize gets longer that slot size, fill with dummy + const int dummyBlockSize = writeBlockSize - fp->get_samples_per_slot(proc->nr_slot_tx, fp); + int tmp = openair0_write_reorder(&UE->rfdevice, writeTimestamp, txp, dummyBlockSize, fp->nb_antennas_tx, flags); + AssertFatal(tmp == dummyBlockSize, ""); + + writeTimestamp += dummyBlockSize; + writeBlockSize -= dummyBlockSize; + } + + int tmp = openair0_write_reorder(&UE->rfdevice, writeTimestamp, txp, writeBlockSize, fp->nb_antennas_tx, flags); + AssertFatal(tmp == writeBlockSize, ""); for (int i = 0; i < fp->nb_antennas_tx; i++) - memset(txp[i], 0, rxtxD->writeBlockSize); + memset(txp[i], 0, writeBlockSize); } void processSlotTX(void *arg)