This code allocates memory from the heap:
```
static void *UE_phy_stub_standalone_pnf_task(void *arg)
{
...
UL_INFO->crc_ind.crc_indication_body.crc_pdu_list =
calloc(NB_UE_INST, sizeof(nfapi_crc_indication_pdu_t));
```
I see NB_UE_INST==1.
Then this code:
```
void fill_crc_indication_UE_MAC(int Mod_id,
int frame,
int subframe,
UL_IND_t *UL_INFO,
uint8_t crc_flag,
int index,
uint16_t rnti,
nfapi_ul_config_request_t
*ul_config_req) {
...
nfapi_crc_indication_pdu_t *pdu =
&UL_INFO->crc_ind.crc_indication_body
.crc_pdu_list[UL_INFO->crc_ind.crc_indication_body.number_of_crcs];
```
used .number_of_crcs to index into .crc_pdu_list without first
checking if .number_of_crcs is in range.
When run with multiple UEs, sometimes .number_of_crcs==1 and then
-fsanitize=address complains.
Change is to use NUMBER_OF_UE_MAX instead of NB_UE_INST.
With this change, -fsanitize=address stopping complaining.
Removing references to memcpy_dl_config_req and
memcpy_tx_req because these functions are leaking
memory. For our standalone mode we have created
new/modified memcpy_dl/tx_req functions.
More accurately, we changed the do/while infinite
loop to be an infinite for loop for the read command of
the socket. The socket file descriptor choice is more clear now.
A fix had to be made in the uci_harq indication function
in the UE. The uci_harq indicaiton function was not properly
checking for dropped packets four subframes back in the UE.
Every if statement that includes a check for
the NFAPI_MODE that did not check for the new
PNF_STANDALONE_MODE now has been updated. Also
changed the tx_req and dl_config_req logs
when they are received at the OAI UE to be
info logs instead of error logs.
Additionally, combined many of the individual
dl_config_req and tx_req handle functions.
Also removed some unused functions we added.
Futhermore, removed our additions to the
dl_config_req and tx_req memcpy functions.
Additionally, combined many of the individual
dl_config_req and tx_req handle functions.
Also removed some unused functions we added.
Futhermore, removed our additions to the
dl_config_req and tx_req memcpy functions.
Synchronized with emane.git's implementation of this code which
includes a unit test.
This commit also fixes two bugs in unqueue_matching and one inb
unqueue:
- unqueue_matching was returning the wrong pointer when
there was no match
- both unqueue_matching and unqueue were not clearing the vacated
queue entry after removing the item
Various mutexes are present in the phy_stub_UE.c file. However, it will
only be run in a single thread; the multiple-thread implementation also
runs the higher layers concurrently, which leads to races and segfaults.
Therefore, remove these mutexes, as we don't need them.