Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54d77198 authored by Linus Walleij's avatar Linus Walleij
Browse files

gpio: bail out silently on NULL descriptors



In fdeb8e15
("gpio: reflect base and ngpio into gpio_device")
assumed that GPIO descriptors are either valid or error
pointers, but gpiod_get_[index_]optional() actually return
NULL descriptors and then all subsequent calls should just
bail out.

Cc: stable@vger.kernel.org
Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Andrew Lunn <andrew@lunn.ch>
Fixes: fdeb8e15 ("gpio: reflect base and ngpio into gpio_device")
Reported-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 8b92e17e
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -1367,10 +1367,13 @@ static int __gpiod_request(struct gpio_desc *desc, const char *label)
/*
 * This descriptor validation needs to be inserted verbatim into each
 * function taking a descriptor, so we need to use a preprocessor
 * macro to avoid endless duplication.
 * macro to avoid endless duplication. If the desc is NULL it is an
 * optional GPIO and calls should just bail out.
 */
#define VALIDATE_DESC(desc) do { \
	if (!desc || !desc->gdev) { \
	if (!desc) \
		return 0; \
	if (!desc->gdev) { \
		pr_warn("%s: invalid GPIO\n", __func__); \
		return -EINVAL; \
	} \
@@ -1381,7 +1384,9 @@ static int __gpiod_request(struct gpio_desc *desc, const char *label)
	} } while (0)

#define VALIDATE_DESC_VOID(desc) do { \
	if (!desc || !desc->gdev) { \
	if (!desc) \
		return; \
	if (!desc->gdev) { \
		pr_warn("%s: invalid GPIO\n", __func__); \
		return; \
	} \