From f0186d716dd971ecb0341b8566da202bbfa3f986 Mon Sep 17 00:00:00 2001 From: Vinayak Chettimada Date: Tue, 29 Nov 2016 04:37:04 +0100 Subject: [PATCH] Bluetooth: Controller: Fix DLE to check supported rx length When the Controller is configured to support less than 251 as the supported maximum data length, missing check caused the Controller to incorrectly re-initialize its rx buffers causing assert during the DLE procedure. This commit fixes the procedure to correctly use the supported maximum length if the peer requests a transmit length that exceeds the supported receive length. Change-id: I6ad7196e3db44b303ddf2ec06e0ae579bf2eb774 Signed-off-by: Vinayak Chettimada Signed-off-by: Carles Cufi --- subsys/bluetooth/controller/ll/ctrl.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/subsys/bluetooth/controller/ll/ctrl.c b/subsys/bluetooth/controller/ll/ctrl.c index e4258318f25..8327ae93a3e 100644 --- a/subsys/bluetooth/controller/ll/ctrl.c +++ b/subsys/bluetooth/controller/ll/ctrl.c @@ -1266,8 +1266,12 @@ static inline void isr_rx_conn_pkt_ctrl_dle(struct pdu_data *pdu_data_rx, eff_tx_octets = lr->max_rx_octets; } - /* use the peer tx as eff rx octets */ - if (lr->max_tx_octets != _radio.conn_curr->max_rx_octets) { + /* use the minimal of our max supported and + * peer max_tx_octets + */ + if (lr->max_tx_octets > RADIO_LL_LENGTH_OCTETS_RX_MAX) { + eff_rx_octets = RADIO_LL_LENGTH_OCTETS_RX_MAX; + } else { eff_rx_octets = lr->max_tx_octets; }