]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gpiolib: Fix potential NULL pointer dereference in gpiod_get_label()
authorLad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Thu, 3 Oct 2024 13:13:51 +0000 (14:13 +0100)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Thu, 3 Oct 2024 18:51:47 +0000 (20:51 +0200)
In `gpiod_get_label()`, it is possible that `srcu_dereference_check()` may
return a NULL pointer, leading to a scenario where `label->str` is accessed
without verifying if `label` itself is NULL.

This patch adds a proper NULL check for `label` before accessing
`label->str`. The check for `label->str != NULL` is removed because
`label->str` can never be NULL if `label` is not NULL.

This fixes the issue where the label name was being printed as `(efault)`
when dumping the sysfs GPIO file when `label == NULL`.

Fixes: 5a646e03e956 ("gpiolib: Return label, if set, for IRQ only line")
Fixes: a86d27693066 ("gpiolib: fix the speed of descriptor label setting with SRCU")
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://lore.kernel.org/r/20241003131351.472015-1-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpiolib.c

index c6afbf434366bc5f7a5a09aedeb2ccf201c1ce58..d5952ab7752c2a8ecc1b04abaa2588455d24e578 100644 (file)
@@ -114,12 +114,12 @@ const char *gpiod_get_label(struct gpio_desc *desc)
                                srcu_read_lock_held(&desc->gdev->desc_srcu));
 
        if (test_bit(FLAG_USED_AS_IRQ, &flags))
-               return label->str ?: "interrupt";
+               return label ? label->str : "interrupt";
 
        if (!test_bit(FLAG_REQUESTED, &flags))
                return NULL;
 
-       return label->str;
+       return label ? label->str : NULL;
 }
 
 static void desc_free_label(struct rcu_head *rh)