gpiolib: Fix return value of gpio_to_desc() stub if !GPIOLIB
Subsystems (2)
PATCH 1/1 gpiolib: Fix return value of gpio_to_desc() stub if !GPIOLIB
If CONFIG_GPOILIB is not set, the stub of gpio_to_desc() should return the same type of error as regular version: NULL. All the callers compare the return value of gpio_to_desc() against NULL, so returned ERR_PTR would be treated as non-error case leading to dereferencing of error value.
--- include/linux/gpio/consumer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/linux/gpio/consumer.h +1 -1
@@ -505,7 +505,7 @@ static inline int gpiod_set_consumer_name(struct gpio_desc *desc,static inline struct gpio_desc *gpio_to_desc (unsigned gpio) { -return ERR_PTR (-EINVAL ); +return NULL ; }static inline int desc_to_gpio (const struct gpio_desc *desc)
Signature · 1 line
2.7.4
Quoted 18 lines · Krzysztof Kozlowski
If
CONFIG_GPOILIBis not set, the stub ofgpio_to_desc()should return the same type of error as regular version: NULL. All the callers compare the return value ofgpio_to_desc()against NULL, so returnedERR_PTRwould be treated as non-error case leading to dereferencing of error value.Fixes 79a9becda894 ("gpiolib: export descriptor-based GPIO interface")Cc <[email protected]>Signed-off-by Krzysztof Kozlowski <[email protected]>--- include/linux/gpio/consumer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)include/linux/gpio/consumer.h +0
-0
include/linux/gpio/consumer.h static inline int gpiod_set_consumer_name(struct gpio_desc *desc, · line 508
Quoted 5 lines
include/linux/gpio/consumer.h +1
-1@@ -505,7 +505,7 @@ static inline int gpiod_set_consumer_name(struct gpio_desc *desc,static inline struct gpio_desc *gpio_to_desc (unsigned gpio) { -return ERR_PTR (-EINVAL ); +return NULL ;
I suppose this is consistent with comitt:22c403676dbbb7c6f186099527af7f065498ef45
"gpio: return NULL from gpiod_get_optional when GPIOLIB is disabled"
So in that way it should be fine.
I'm just wondering where you see this problem, because IMO a driver that is using GPIO should either
depends on GPIOLIB or
select GPIOLIB
it is extremely uncommon for a GPIO line to actually be optional at compile time (as opposed to optional at runtime) so I would very much like to look closer at this.
Yours,
Linus Walleij
Quoted 33 lines · Linus Walleij
Quoted 18 lines · Krzysztof Kozlowski
If
CONFIG_GPOILIBis not set, the stub ofgpio_to_desc()should return the same type of error as regular version: NULL. All the callers compare the return value ofgpio_to_desc()against NULL, so returnedERR_PTRwould be treated as non-error case leading to dereferencing of error value.Fixes 79a9becda894 ("gpiolib: export descriptor-based GPIO interface")Cc <[email protected]>Signed-off-by Krzysztof Kozlowski <[email protected]>--- include/linux/gpio/consumer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)include/linux/gpio/consumer.h +0
-0include/linux/gpio/consumer.h static inline int gpiod_set_consumer_name(struct gpio_desc *desc, · line 508
Quoted 5 lines
include/linux/gpio/consumer.h +1
-1@@ -505,7 +505,7 @@ static inline int gpiod_set_consumer_name(struct gpio_desc *desc,static inline struct gpio_desc *gpio_to_desc (unsigned gpio) { -return ERR_PTR (-EINVAL ); +return NULL ;I suppose this is consistent with comitt:
22c403676dbbb7c6f186099527af7f065498ef45
"gpio: return NULL fromgpiod_get_optionalwhen GPIOLIB is disabled"So in that way it should be fine.
Quoted 7 lines
I'm just wondering where you see this problem, because IMO a driver that is using GPIO should either
depends on GPIOLIB or
select GPIOLIB
it is extremely uncommon for a GPIO line to actually be optional at compile time (as opposed to optional at runtime) so I would very much like to look closer at this.
No, I did not hit this error. Maybe I should mention this explicitly that this case is rather theoretical (feel free to change the commit msg respectively). What is however important, it misleads developers which test for ERR_PTR, like before this fix:2d88a331e48095cf60ad9bdf3177bd401bf99727 ("leds: leds-gpio: Fix return value check in create_gpio_led()")
Best regards,
Krzysztof
Quoted 9 lines · Krzysztof Kozlowski
If
CONFIG_GPOILIBis not set, the stub ofgpio_to_desc()should return the same type of error as regular version: NULL. All the callers compare the return value ofgpio_to_desc()against NULL, so returnedERR_PTRwould be treated as non-error case leading to dereferencing of error value.Fixes 79a9becda894 ("gpiolib: export descriptor-based GPIO interface")Cc <[email protected]>Signed-off-by Krzysztof Kozlowski <[email protected]>
Patch applied. I kept the Fixes but removed stable, I do not know of any regression it is fixing.
Yours,
Linus Walleij