summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJett Rink <jettrink@chromium.org>2020-11-10 16:50:01 -0700
committerCommit Bot <commit-bot@chromium.org>2020-11-11 17:00:44 +0000
commitbcfcf0a1aaa09a3b9cba98b87887901c98c6cff1 (patch)
tree6690b2416a8d28016c7c6ac6e2620ccd21987694
parenta418c258495274e04778d6d62187bb5ddcec2e7d (diff)
downloadchrome-ec-bcfcf0a1aaa09a3b9cba98b87887901c98c6cff1.tar.gz
zephyr/gpio: add bound checks to all gpio functions
The static check for zephyr will generate warnings if we do not bounds check the incoming gpio_signal enum. We should bounds check anyway. BRANCH=none BUG=b:172512307 TEST=build posix-ec with CL stack Signed-off-by: Jett Rink <jettrink@chromium.org> Change-Id: I1b2014c02e02d7271eeabd3cc041b3c452b1c43f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2530151 Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
-rw-r--r--zephyr/shim/src/gpio.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/zephyr/shim/src/gpio.c b/zephyr/shim/src/gpio.c
index 0b74e44234..89f9a53451 100644
--- a/zephyr/shim/src/gpio.c
+++ b/zephyr/shim/src/gpio.c
@@ -123,6 +123,9 @@ int gpio_is_implemented(enum gpio_signal signal)
int gpio_get_level(enum gpio_signal signal)
{
+ if (signal >= ARRAY_SIZE(configs))
+ return 0;
+
const int l = gpio_pin_get_raw(data[signal].dev, configs[signal].pin);
if (l < 0) {
@@ -134,11 +137,17 @@ int gpio_get_level(enum gpio_signal signal)
const char *gpio_get_name(enum gpio_signal signal)
{
+ if (signal >= ARRAY_SIZE(configs))
+ return "";
+
return configs[signal].name;
}
void gpio_set_level(enum gpio_signal signal, int value)
{
+ if (signal >= ARRAY_SIZE(configs))
+ return;
+
int rv = gpio_pin_set_raw(data[signal].dev, configs[signal].pin, value);
if (rv < 0) {
@@ -249,6 +258,9 @@ int gpio_disable_interrupt(enum gpio_signal signal)
{
int rv;
+ if (signal >= ARRAY_SIZE(configs))
+ return -1;
+
rv = gpio_pin_interrupt_configure(data[signal].dev, configs[signal].pin,
GPIO_INT_DISABLE);
if (rv < 0) {