From a7b327310d05a1c392fff873baaacc394b5d66db Mon Sep 17 00:00:00 2001 From: Flavio Ceolin Date: Mon, 23 Mar 2020 13:40:50 -0700 Subject: [PATCH] samples: fxos8700-hid: Fix possible underflow gpio_pin_get() returns a negative value in case of error and callbacks_configure was assigning this value to an unsigned variable. Fixes: #22643 Coverity CID :208206 Signed-off-by: Flavio Ceolin --- samples/sensor/fxos8700-hid/src/main.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/samples/sensor/fxos8700-hid/src/main.c b/samples/sensor/fxos8700-hid/src/main.c index de587ae6874..217c074be54 100644 --- a/samples/sensor/fxos8700-hid/src/main.c +++ b/samples/sensor/fxos8700-hid/src/main.c @@ -118,6 +118,8 @@ int callbacks_configure(struct device *gpio, u32_t pin, int flags, void (*handler)(struct device*, struct gpio_callback*, u32_t), struct gpio_callback *callback, u32_t *val) { + int ret; + if (!gpio) { LOG_ERR("Could not find PORT"); return -ENXIO; @@ -125,11 +127,13 @@ int callbacks_configure(struct device *gpio, u32_t pin, int flags, gpio_pin_configure(gpio, pin, GPIO_INPUT | GPIO_INT_DEBOUNCE | flags); - *val = gpio_pin_get(gpio, pin); - if (*val < 0) { - return *val; + ret = gpio_pin_get(gpio, pin); + if (ret < 0) { + return ret; } + *val = (u32_t)ret; + gpio_init_callback(callback, handler, BIT(pin)); gpio_add_callback(gpio, callback); gpio_pin_interrupt_configure(gpio, pin, GPIO_INT_EDGE_BOTH);