Lora-net / SWL2001

LoRa Basics Modem LoRaWAN stack
BSD 3-Clause Clear License
104 stars 60 forks source link

LR-FHSS crash on ral_lr_fhss_build_frame() LBM 4.3.0 #37

Closed lbm-team closed 6 months ago

lbm-team commented 7 months ago

Modem sometimes crashes in LR-FHSS depending on random choice of hop_sequence_id

Below is the proposed fix to resolve the issue:

diff --git a/lbm_lib/smtc_modem_core/lr1mac/src/lr1_stack_mac_layer.c b/lbm_lib/smtc_modem_core/lr1mac/src/lr1_stack_mac_layer.c
index d84b08f45e6491bac95972cfc1d028c205db03af..e46460a741e3f5221553bd5d47393dd12e9f1319 100644
--- a/lbm_lib/smtc_modem_core/lr1mac/src/lr1_stack_mac_layer.c
+++ b/lbm_lib/smtc_modem_core/lr1mac/src/lr1_stack_mac_layer.c
@@ -497,7 +497,8 @@ void lr1_stack_mac_tx_radio_start( lr1_stack_mac_t* lr1_mac )
         SMTC_MODEM_HAL_PANIC_ON_FAILURE( ral_lr_fhss_get_hop_sequence_count( &lr1_mac->rp->radio->ral,
                                                                              &lr_fhss_param.ral_lr_fhss_params,
                                                                              &nb_max_hop_sequence ) == RAL_STATUS_OK );
-        lr_fhss_param.hop_sequence_id = smtc_modem_hal_get_random_nb_in_range( 0, ( uint32_t ) nb_max_hop_sequence );
+        lr_fhss_param.hop_sequence_id =
+            smtc_modem_hal_get_random_nb_in_range( 0, ( uint32_t ) nb_max_hop_sequence - 1 );
         lr_fhss_param.ral_lr_fhss_params.lr_fhss_params.modulation_type = LR_FHSS_V1_MODULATION_TYPE_GMSK_488;
         lr_fhss_param.ral_lr_fhss_params.lr_fhss_params.cr              = tx_cr;
         lr_fhss_param.ral_lr_fhss_params.lr_fhss_params.grid            = smtc_real_lr_fhss_get_grid( lr1_mac->real );
lbm-team commented 6 months ago

Fixed in v4.3.1