Fix a wraparound bug with equal priority remaining buffer size in MAC
This commit is contained in:
@@ -2514,7 +2514,10 @@ static long get_num_bytes_to_reqlc(NR_UE_MAC_INST_t *mac,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
AssertFatal(num_remaining_bytes >= 0 && num_bytes_requested <= buflen_remain,
|
AssertFatal(num_remaining_bytes >= 0 && num_bytes_requested <= buflen_remain,
|
||||||
"the total number of bytes allocated until target length is greater than expected\n");
|
"the total number of bytes allocated until target length is greater than expected: num_bytes_requested %ld, "
|
||||||
|
"buflen_remain %d\n",
|
||||||
|
num_bytes_requested,
|
||||||
|
buflen_remain);
|
||||||
LOG_D(NR_MAC, "number of bytes requested for lcid %d is %li\n", lc_num, num_bytes_requested);
|
LOG_D(NR_MAC, "number of bytes requested for lcid %d is %li\n", lc_num, num_bytes_requested);
|
||||||
|
|
||||||
return num_bytes_requested;
|
return num_bytes_requested;
|
||||||
@@ -2780,11 +2783,9 @@ static uint8_t nr_ue_get_sdu(NR_UE_MAC_INST_t *mac,
|
|||||||
remain);
|
remain);
|
||||||
|
|
||||||
if (num_lcids_same_priority == count_same_priority_lcids) {
|
if (num_lcids_same_priority == count_same_priority_lcids) {
|
||||||
buflen_ep = (remain - (count_same_priority_lcids * sizeof(NR_MAC_SUBHEADER_LONG))) / count_same_priority_lcids;
|
buflen_ep = remain < count_same_priority_lcids * sizeof(NR_MAC_SUBHEADER_LONG)
|
||||||
/* after serving equal priority LCIDs in the first round, buflen_remain could be > 0 and < (count_same_priority_lcids * sh_size)
|
? 0
|
||||||
if above division yeilds a remainder. hence the following sets buflen_ep to 0 if there is not enough buffer left for subsequent rounds
|
: (remain - (count_same_priority_lcids * sizeof(NR_MAC_SUBHEADER_LONG))) / count_same_priority_lcids;
|
||||||
*/
|
|
||||||
buflen_ep = buflen_ep < 0 ? 0 : buflen_ep;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while (mac_ce_info.end_for_tailer - mac_ce_info.cur_ptr > 0) {
|
while (mac_ce_info.end_for_tailer - mac_ce_info.cur_ptr > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user