]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
gpiolib: fix invalid pointer access in debugfs
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 3 Nov 2025 14:11:32 +0000 (15:11 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:37:42 +0000 (15:37 -0500)
[ Upstream commit 2f6115ad8864cf3f48598f26c74c7c8e5c391919 ]

If the memory allocation in gpiolib_seq_start() fails, the s->private
field remains uninitialized and is later dereferenced without checking
in gpiolib_seq_stop(). Initialize s->private to NULL before calling
kzalloc() and check it before dereferencing it.

Fixes: e348544f7994 ("gpio: protect the list of GPIO devices with SRCU")
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20251103141132.53471-1-brgl@bgdev.pl
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpio/gpiolib.c

index 74d54513730a70814d84a4a84f2d8c8b7db3fe05..4aa66d7b085983faa8843eb47f0443d572cd203f 100644 (file)
@@ -5285,6 +5285,8 @@ static void *gpiolib_seq_start(struct seq_file *s, loff_t *pos)
        struct gpio_device *gdev;
        loff_t index = *pos;
 
+       s->private = NULL;
+
        priv = kzalloc(sizeof(*priv), GFP_KERNEL);
        if (!priv)
                return NULL;
@@ -5318,7 +5320,11 @@ static void *gpiolib_seq_next(struct seq_file *s, void *v, loff_t *pos)
 
 static void gpiolib_seq_stop(struct seq_file *s, void *v)
 {
-       struct gpiolib_seq_priv *priv = s->private;
+       struct gpiolib_seq_priv *priv;
+
+       priv = s->private;
+       if (!priv)
+               return;
 
        srcu_read_unlock(&gpio_devices_srcu, priv->idx);
        kfree(priv);