gpio: sim: fix memory corruption when adding named lines and unnamed hogs
authorKent Gibson <warthog618@gmail.com>
Tue, 6 Jun 2023 12:00:34 +0000 (20:00 +0800)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Tue, 6 Jun 2023 15:02:34 +0000 (17:02 +0200)
When constructing the sim, gpio-sim constructs an array of named lines,
sized based on the largest offset of any named line, and then initializes
that array with the names of all lines, including unnamed hogs with higher
offsets.  In doing so it writes NULLs beyond the extent of the array.

Add a check that only named lines are used to initialize the array.

Fixes: cb8c474e79be ("gpio: sim: new testing module")
Signed-off-by: Kent Gibson<warthog618@gmail.com>
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-sim.c

index a1c8702f362ce76ce7b1ae96ad0b3d378eec0ab6..fab67a5785d70063dd752a15e8ce8018863ad65d 100644 (file)
@@ -721,8 +721,10 @@ static char **gpio_sim_make_line_names(struct gpio_sim_bank *bank,
        if (!line_names)
                return ERR_PTR(-ENOMEM);
 
-       list_for_each_entry(line, &bank->line_list, siblings)
-               line_names[line->offset] = line->name;
+       list_for_each_entry(line, &bank->line_list, siblings) {
+               if (line->name && (line->offset <= max_offset))
+                       line_names[line->offset] = line->name;
+       }
 
        return line_names;
 }