From 20576597df80e95f762b3ac4de83e5b9d89eca56 Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Tue, 13 May 2025 14:30:26 +0200 Subject: [PATCH] Bluetooth: Controller: nRF54Lx: Fix MDATA length to avoid MIC failures Fix MDATA length with extra bytes to mitigate MIC failures. Signed-off-by: Vinayak Kariappa Chettimada --- .../controller/ll_sw/nordic/hal/nrf5/radio/radio.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio.c b/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio.c index 596d0137388..c4f1d67718a 100644 --- a/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio.c +++ b/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio.c @@ -2072,6 +2072,11 @@ struct ccm_job_ptr { #define CCM_JOB_PTR_ATTRIBUTE_ADATA 13U #define CCM_JOB_PTR_ATTRIBUTE_MDATA 14U +/* For a Max 27 byte PDU reception, an actual 26 byte PDU needs the below extra MDATA length to + * mitigate MIC failures. I.e. MDATA length = 27 + 4 (MIC size) + 2 (extra). + */ +#define NRF_CCM_WORKAROUND_XXXX_MDATA_EXTRA 2U + static struct { uint16_t in_alen; uint16_t in_mlen; @@ -2253,7 +2258,7 @@ static void *radio_ccm_ext_rx_pkt_set(struct ccm *cnf, uint8_t phy, uint8_t pdu_ ccm_job.in[3].attribute = CCM_JOB_PTR_ATTRIBUTE_ADATA; ccm_job.in[4].ptr = (void *)((uint8_t *)_pkt_scratch + 3U); - ccm_job.in[4].length = mlen; + ccm_job.in[4].length = mlen + NRF_CCM_WORKAROUND_XXXX_MDATA_EXTRA; ccm_job.in[4].attribute = CCM_JOB_PTR_ATTRIBUTE_MDATA; ccm_job.in[5].ptr = NULL;