iter: fix a crash occurring if no GPIO chips are present
authorBartosz Golaszewski <bartekgola@gmail.com>
Sun, 5 Nov 2017 20:04:52 +0000 (21:04 +0100)
committerBartosz Golaszewski <bartekgola@gmail.com>
Sun, 5 Nov 2017 20:04:52 +0000 (21:04 +0100)
If no GPIO chips are present in the system, we bail out from
gpiod_chip_iter_new() before allocating the chips array. Add a check
in gpiod_chip_iter_free() to avoid calling free() for iter->chips in
that case.

Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
src/lib/iter.c

index 62a416554083714cf7827bbd7912242ae458a983..b9ae310d4f3765188e5f1556e8b46a894020128e 100644 (file)
@@ -58,8 +58,10 @@ struct gpiod_chip_iter * gpiod_chip_iter_new(void)
        iter->num_chips = num_chips;
        iter->offset = 0;
 
-       if (num_chips == 0)
+       if (num_chips == 0) {
+               iter->chips = NULL;
                return iter;
+       }
 
        iter->chips = calloc(num_chips, sizeof(*iter->chips));
        if (!iter->chips)
@@ -108,7 +110,9 @@ void gpiod_chip_iter_free_noclose(struct gpiod_chip_iter *iter)
                        gpiod_chip_close(iter->chips[i]);
        }
 
-       free(iter->chips);
+       if (iter->chips)
+               free(iter->chips);
+
        free(iter);
 }