diff options
author | Robert Zieba <robertzieba@google.com> | 2023-01-18 23:09:59 +0000 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-01-19 18:04:39 +0000 |
commit | a8a41843c7950657f4674e7cfa110d36bec5e48a (patch) | |
tree | 5eac9c2c7bc7c4468c9990acb70df9803dc114f5 /zephyr/shim | |
parent | e35e2da998fbff3693229d62cacd41c77507a58a (diff) | |
download | chrome-ec-a8a41843c7950657f4674e7cfa110d36bec5e48a.tar.gz |
zephyr/shim/led_driver: Add EC_LED_COLOR_INVALID enum value
The ARM EABI uses `-fshort-enums` by default. This causes `enum
ec_led_colors` to be represented as a `uint8_t`. This can cause issues
with the off LED state which is supposed to use -1 for its color.
However, its color ends up as 255 instead. This can cause buffer
overflows in the LED code. Add `EC_LED_COLOR_INVALID` to cause the enum
to be represented as a signed integer and update existing code to use
this value instead of a plain -1.
BRANCH=none
BUG=b:260547985
TEST=Successfully ran LED factory test
Change-Id: Ibc5fd1d46ad408b6e94dc1c3a9b01f269ac8ba7e
Signed-off-by: Robert Zieba <robertzieba@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4179359
Tested-by: Elthan Huang <elthan_huang@compal.corp-partner.google.com>
Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'zephyr/shim')
-rw-r--r-- | zephyr/shim/src/led_driver/led_gpio.c | 5 | ||||
-rw-r--r-- | zephyr/shim/src/led_driver/led_pwm.c | 5 |
2 files changed, 6 insertions, 4 deletions
diff --git a/zephyr/shim/src/led_driver/led_gpio.c b/zephyr/shim/src/led_driver/led_gpio.c index d6af1772c2..485383402c 100644 --- a/zephyr/shim/src/led_driver/led_gpio.c +++ b/zephyr/shim/src/led_driver/led_gpio.c @@ -85,7 +85,7 @@ void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) for (int i = 0; i < ARRAY_SIZE(pins_node); i++) { int br_color = pins_node[i]->br_color; - if (br_color != -1) + if (br_color != EC_LED_COLOR_INVALID) brightness_range[br_color] = 1; } } @@ -97,7 +97,8 @@ int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) for (int i = 0; i < ARRAY_SIZE(pins_node); i++) { int br_color = pins_node[i]->br_color; - if ((br_color != -1) && (brightness[br_color] != 0)) { + if (br_color != EC_LED_COLOR_INVALID && + brightness[br_color] != 0) { color_set = true; led_set_color(pins_node[i]->led_color, led_id); } diff --git a/zephyr/shim/src/led_driver/led_pwm.c b/zephyr/shim/src/led_driver/led_pwm.c index 9fcafeea53..db6310ca22 100644 --- a/zephyr/shim/src/led_driver/led_pwm.c +++ b/zephyr/shim/src/led_driver/led_pwm.c @@ -107,7 +107,7 @@ void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) continue; } - if (br_color != -1) { + if (br_color != EC_LED_COLOR_INVALID) { brightness_range[br_color] = 100; } } @@ -124,7 +124,8 @@ int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) continue; } - if ((br_color != -1) && (brightness[br_color] != 0)) { + if (br_color != EC_LED_COLOR_INVALID && + brightness[br_color] != 0) { color_set = true; led_set_color(pins_node[i]->led_color, led_id); } |