]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gpiolib: sanitize the return value of gpio_chip::get_multiple()
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 10 Feb 2025 10:51:59 +0000 (11:51 +0100)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 24 Feb 2025 09:02:33 +0000 (10:02 +0100)
As per the API contract, the get_multiple() callback is only allowed to
return 0 or a negative error number. Filter out anything else.

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20250210-gpio-sanitize-retvals-v1-5-12ea88506cb2@linaro.org
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpiolib.c

index 1a3f527aba0eaa77e10ebc75e5925c9153b98a7c..9ac2dad0ad3429d0f6c3a1e61abdd4699f8749ca 100644 (file)
@@ -3182,10 +3182,16 @@ static int gpiod_get_raw_value_commit(const struct gpio_desc *desc)
 static int gpio_chip_get_multiple(struct gpio_chip *gc,
                                  unsigned long *mask, unsigned long *bits)
 {
+       int ret;
+       
        lockdep_assert_held(&gc->gpiodev->srcu);
 
-       if (gc->get_multiple)
-               return gc->get_multiple(gc, mask, bits);
+       if (gc->get_multiple) {
+               ret = gc->get_multiple(gc, mask, bits);
+               if (ret > 0)
+                       return -EBADE;
+       }
+
        if (gc->get) {
                int i, value;