Skip to content

Commit 69737c5

Browse files
authored
Merge pull request #767 from RubenKelevra/bugfix/hm0360_missing_error_handling_possible_PLL_register_corruption
hm0360: harden _set_pll() against read-failures & bad widths, silence unused-param warnings
2 parents c1a8d48 + c12517e commit 69737c5

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

sensors/hm0360.c

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <stdint.h>
77
#include <stdlib.h>
88
#include <string.h>
9+
#include <errno.h>
910
#include "sccb.h"
1011
#include "xclk.h"
1112
#include "hm0360.h"
@@ -345,6 +346,14 @@ static int set_xclk(sensor_t *sensor, int timer, int xclk)
345346

346347
static int _set_pll(sensor_t *sensor, int bypass, int multiplier, int sys_div, int root_2x, int pre_div, int seld5, int pclk_manual, int pclk_div)
347348
{
349+
(void)bypass;
350+
(void)multiplier;
351+
(void)sys_div;
352+
(void)root_2x;
353+
(void)pre_div;
354+
(void)seld5;
355+
(void)pclk_manual;
356+
(void)pclk_div;
348357
uint8_t value = 0;
349358
uint8_t pll_cfg = 0;
350359

@@ -358,7 +367,20 @@ static int _set_pll(sensor_t *sensor, int bypass, int multiplier, int sys_div, i
358367
value = 0x00;
359368
}
360369

361-
pll_cfg = read_reg(sensor->slv_addr, PLL1CFG);
370+
int ret = read_reg(sensor->slv_addr, PLL1CFG);
371+
if (ret < 0) {
372+
return ret;
373+
}
374+
if (ret > 0xFF) {
375+
/*
376+
* Guard against unexpected wide register values. If read_reg
377+
* ever returns a 16-bit result, reject values that don't fit
378+
* in a single byte to avoid truncation.
379+
*/
380+
return -ERANGE;
381+
}
382+
383+
pll_cfg = (uint8_t)ret;
362384
return write_reg(sensor->slv_addr, PLL1CFG, (pll_cfg & 0xFC) | value);
363385
}
364386

0 commit comments

Comments
 (0)