Skip to content

Commit d45963a

Browse files
gregkhlag-linaro
authored andcommitted
leds: qcom-lpg: Check for array overflow when selecting the high resolution
When selecting the high resolution values from the array, FIELD_GET() is used to pull from a 3 bit register, yet the array being indexed has only 5 values in it. Odds are the hardware is sane, but just to be safe, properly check before just overflowing and reading random data and then setting up chip values based on that. Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://patch.msgid.link/2026021934-nearby-playroom-036b@gregkh Signed-off-by: Lee Jones <lee@kernel.org>
1 parent 437536c commit d45963a

1 file changed

Lines changed: 6 additions & 1 deletion

File tree

drivers/leds/rgb/leds-qcom-lpg.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1273,7 +1273,12 @@ static int lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
12731273
return ret;
12741274

12751275
if (chan->subtype == LPG_SUBTYPE_HI_RES_PWM) {
1276-
refclk = lpg_clk_rates_hi_res[FIELD_GET(PWM_CLK_SELECT_HI_RES_MASK, val)];
1276+
unsigned int clk_idx = FIELD_GET(PWM_CLK_SELECT_HI_RES_MASK, val);
1277+
1278+
if (clk_idx >= ARRAY_SIZE(lpg_clk_rates_hi_res))
1279+
return -EINVAL;
1280+
1281+
refclk = lpg_clk_rates_hi_res[clk_idx];
12771282
resolution = lpg_pwm_resolution_hi_res[FIELD_GET(PWM_SIZE_HI_RES_MASK, val)];
12781283
} else {
12791284
refclk = lpg_clk_rates[FIELD_GET(PWM_CLK_SELECT_MASK, val)];

0 commit comments

Comments
 (0)