Skip to content

Commit c85693c

Browse files
committed
Added checks after reads to avoid write random content on pointers
The related issue is Issue #10 in lis2dux12-pid repository (see STMicroelectronics/lis2dux12-pid#10). Signed-off-by: Gioele Fiorenza <gioele.fiorenza2000@gmail.com>
1 parent 686d483 commit c85693c

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

lis2mdl_reg.c

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,9 @@ int32_t lis2mdl_mag_user_offset_get(const stmdev_ctx_t *ctx, int16_t *val)
167167
int32_t ret;
168168

169169
ret = lis2mdl_read_reg(ctx, LIS2MDL_OFFSET_X_REG_L, buff, 6);
170+
171+
if (ret != 0) { return ret; }
172+
170173
val[0] = (int16_t)buff[1];
171174
val[0] = (val[0] * 256) + (int16_t)buff[0];
172175
val[1] = (int16_t)buff[3];
@@ -218,6 +221,8 @@ int32_t lis2mdl_operating_mode_get(const stmdev_ctx_t *ctx,
218221

219222
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_A, (uint8_t *)&reg, 1);
220223

224+
if (ret != 0) { return ret; }
225+
221226
switch (reg.md)
222227
{
223228
case LIS2MDL_POWER_DOWN:
@@ -279,6 +284,8 @@ int32_t lis2mdl_data_rate_get(const stmdev_ctx_t *ctx, lis2mdl_odr_t *val)
279284

280285
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_A, (uint8_t *)&reg, 1);
281286

287+
if (ret != 0) { return ret; }
288+
282289
switch (reg.odr)
283290
{
284291
case LIS2MDL_ODR_10Hz:
@@ -344,6 +351,8 @@ int32_t lis2mdl_power_mode_get(const stmdev_ctx_t *ctx, lis2mdl_lp_t *val)
344351

345352
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_A, (uint8_t *)&reg, 1);
346353

354+
if (ret != 0) { return ret; }
355+
347356
switch (reg.lp)
348357
{
349358
case LIS2MDL_HIGH_RESOLUTION:
@@ -400,6 +409,9 @@ int32_t lis2mdl_offset_temp_comp_get(const stmdev_ctx_t *ctx, uint8_t *val)
400409
int32_t ret;
401410

402411
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_A, (uint8_t *)&reg, 1);
412+
413+
if (ret != 0) { return ret; }
414+
403415
*val = reg.comp_temp_en;
404416

405417
return ret;
@@ -446,6 +458,8 @@ int32_t lis2mdl_low_pass_bandwidth_get(const stmdev_ctx_t *ctx,
446458

447459
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_B, (uint8_t *)&reg, 1);
448460

461+
if (ret != 0) { return ret; }
462+
449463
switch (reg.lpf)
450464
{
451465
case LIS2MDL_ODR_DIV_2:
@@ -505,6 +519,8 @@ int32_t lis2mdl_set_rst_mode_get(const stmdev_ctx_t *ctx,
505519

506520
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_B, (uint8_t *)&reg, 1);
507521

522+
if (ret != 0) { return ret; }
523+
508524
switch (reg.set_rst)
509525
{
510526
case LIS2MDL_SET_SENS_ODR_DIV_63:
@@ -575,6 +591,9 @@ int32_t lis2mdl_set_rst_sensor_single_get(const stmdev_ctx_t *ctx,
575591
int32_t ret;
576592

577593
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_B, (uint8_t *)&reg, 1);
594+
595+
if (ret != 0) { return ret; }
596+
578597
*val = reg.off_canc_one_shot;
579598

580599
return ret;
@@ -618,6 +637,9 @@ int32_t lis2mdl_block_data_update_get(const stmdev_ctx_t *ctx, uint8_t *val)
618637
int32_t ret;
619638

620639
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_C, (uint8_t *)&reg, 1);
640+
641+
if (ret != 0) { return ret; }
642+
621643
*val = reg.bdu;
622644

623645
return ret;
@@ -637,6 +659,9 @@ int32_t lis2mdl_mag_data_ready_get(const stmdev_ctx_t *ctx, uint8_t *val)
637659
int32_t ret;
638660

639661
ret = lis2mdl_read_reg(ctx, LIS2MDL_STATUS_REG, (uint8_t *)&reg, 1);
662+
663+
if (ret != 0) { return ret; }
664+
640665
*val = reg.zyxda;
641666

642667
return ret;
@@ -656,6 +681,9 @@ int32_t lis2mdl_mag_data_ovr_get(const stmdev_ctx_t *ctx, uint8_t *val)
656681
int32_t ret;
657682

658683
ret = lis2mdl_read_reg(ctx, LIS2MDL_STATUS_REG, (uint8_t *)&reg, 1);
684+
685+
if (ret != 0) { return ret; }
686+
659687
*val = reg.zyxor;
660688

661689
return ret;
@@ -675,6 +703,9 @@ int32_t lis2mdl_magnetic_raw_get(const stmdev_ctx_t *ctx, int16_t *val)
675703
int32_t ret;
676704

677705
ret = lis2mdl_read_reg(ctx, LIS2MDL_OUTX_L_REG, buff, 6);
706+
707+
if (ret != 0) { return ret; }
708+
678709
val[0] = (int16_t)buff[1];
679710
val[0] = (val[0] * 256) + (int16_t)buff[0];
680711
val[1] = (int16_t)buff[3];
@@ -699,6 +730,9 @@ int32_t lis2mdl_temperature_raw_get(const stmdev_ctx_t *ctx, int16_t *val)
699730
int32_t ret;
700731

701732
ret = lis2mdl_read_reg(ctx, LIS2MDL_TEMP_OUT_L_REG, buff, 2);
733+
734+
if (ret != 0) { return ret; }
735+
702736
*val = (int16_t)buff[1];
703737
*val = (*val * 256) + (int16_t)buff[0];
704738

@@ -772,6 +806,9 @@ int32_t lis2mdl_reset_get(const stmdev_ctx_t *ctx, uint8_t *val)
772806
int32_t ret;
773807

774808
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_A, (uint8_t *)&reg, 1);
809+
810+
if (ret != 0) { return ret; }
811+
775812
*val = reg.soft_rst;
776813

777814
return ret;
@@ -815,6 +852,9 @@ int32_t lis2mdl_boot_get(const stmdev_ctx_t *ctx, uint8_t *val)
815852
int32_t ret;
816853

817854
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_A, (uint8_t *)&reg, 1);
855+
856+
if (ret != 0) { return ret; }
857+
818858
*val = reg.reboot;
819859

820860
return ret;
@@ -858,6 +898,9 @@ int32_t lis2mdl_self_test_get(const stmdev_ctx_t *ctx, uint8_t *val)
858898
int32_t ret;
859899

860900
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_C, (uint8_t *)&reg, 1);
901+
902+
if (ret != 0) { return ret; }
903+
861904
*val = reg.self_test;
862905

863906
return ret;
@@ -902,6 +945,8 @@ int32_t lis2mdl_data_format_get(const stmdev_ctx_t *ctx, lis2mdl_ble_t *val)
902945

903946
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_C, (uint8_t *)&reg, 1);
904947

948+
if (ret != 0) { return ret; }
949+
905950
switch (reg.ble)
906951
{
907952
case LIS2MDL_LSB_AT_LOW_ADD:
@@ -993,6 +1038,8 @@ int32_t lis2mdl_offset_int_conf_get(const stmdev_ctx_t *ctx,
9931038

9941039
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_B, (uint8_t *)&reg, 1);
9951040

1041+
if (ret != 0) { return ret; }
1042+
9961043
switch (reg.int_on_dataoff)
9971044
{
9981045
case LIS2MDL_CHECK_BEFORE:
@@ -1049,6 +1096,9 @@ int32_t lis2mdl_drdy_on_pin_get(const stmdev_ctx_t *ctx, uint8_t *val)
10491096
int32_t ret;
10501097

10511098
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_C, (uint8_t *)&reg, 1);
1099+
1100+
if (ret != 0) { return ret; }
1101+
10521102
*val = reg.drdy_on_pin;
10531103

10541104
return ret;
@@ -1092,6 +1142,9 @@ int32_t lis2mdl_int_on_pin_get(const stmdev_ctx_t *ctx, uint8_t *val)
10921142
int32_t ret;
10931143

10941144
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_C, (uint8_t *)&reg, 1);
1145+
1146+
if (ret != 0) { return ret; }
1147+
10951148
*val = reg.int_on_pin;
10961149

10971150
return ret;
@@ -1189,6 +1242,9 @@ int32_t lis2mdl_int_gen_threshold_get(const stmdev_ctx_t *ctx, uint16_t *val)
11891242
int32_t ret;
11901243

11911244
ret = lis2mdl_read_reg(ctx, LIS2MDL_INT_THS_L_REG, buff, 2);
1245+
1246+
if (ret != 0) { return ret; }
1247+
11921248
*val = buff[1];
11931249
*val = (*val * 256U) + buff[0];
11941250

@@ -1247,6 +1303,8 @@ int32_t lis2mdl_spi_mode_get(const stmdev_ctx_t *ctx, lis2mdl_sim_t *val)
12471303

12481304
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_C, (uint8_t *)&reg, 1);
12491305

1306+
if (ret != 0) { return ret; }
1307+
12501308
switch (reg._4wspi)
12511309
{
12521310
case LIS2MDL_SPI_4_WIRE:
@@ -1306,6 +1364,8 @@ int32_t lis2mdl_i2c_interface_get(const stmdev_ctx_t *ctx,
13061364

13071365
ret = lis2mdl_read_reg(ctx, LIS2MDL_CFG_REG_C, (uint8_t *)&reg, 1);
13081366

1367+
if (ret != 0) { return ret; }
1368+
13091369
switch (reg.i2c_dis)
13101370
{
13111371
case LIS2MDL_I2C_ENABLE:

0 commit comments

Comments
 (0)