diff options
Diffstat (limited to 'drivers/gpio/gpiolib.c')
-rw-r--r-- | drivers/gpio/gpiolib.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 43aeb07343ec..d8ccb500872f 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c | |||
@@ -497,7 +497,7 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip) | |||
497 | struct gpiohandle_request handlereq; | 497 | struct gpiohandle_request handlereq; |
498 | struct linehandle_state *lh; | 498 | struct linehandle_state *lh; |
499 | struct file *file; | 499 | struct file *file; |
500 | int fd, i, ret; | 500 | int fd, i, count = 0, ret; |
501 | u32 lflags; | 501 | u32 lflags; |
502 | 502 | ||
503 | if (copy_from_user(&handlereq, ip, sizeof(handlereq))) | 503 | if (copy_from_user(&handlereq, ip, sizeof(handlereq))) |
@@ -558,6 +558,7 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip) | |||
558 | if (ret) | 558 | if (ret) |
559 | goto out_free_descs; | 559 | goto out_free_descs; |
560 | lh->descs[i] = desc; | 560 | lh->descs[i] = desc; |
561 | count = i; | ||
561 | 562 | ||
562 | if (lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW) | 563 | if (lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW) |
563 | set_bit(FLAG_ACTIVE_LOW, &desc->flags); | 564 | set_bit(FLAG_ACTIVE_LOW, &desc->flags); |
@@ -628,7 +629,7 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip) | |||
628 | out_put_unused_fd: | 629 | out_put_unused_fd: |
629 | put_unused_fd(fd); | 630 | put_unused_fd(fd); |
630 | out_free_descs: | 631 | out_free_descs: |
631 | for (; i >= 0; i--) | 632 | for (i = 0; i < count; i++) |
632 | gpiod_free(lh->descs[i]); | 633 | gpiod_free(lh->descs[i]); |
633 | kfree(lh->label); | 634 | kfree(lh->label); |
634 | out_free_lh: | 635 | out_free_lh: |
@@ -902,7 +903,7 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip) | |||
902 | desc = &gdev->descs[offset]; | 903 | desc = &gdev->descs[offset]; |
903 | ret = gpiod_request(desc, le->label); | 904 | ret = gpiod_request(desc, le->label); |
904 | if (ret) | 905 | if (ret) |
905 | goto out_free_desc; | 906 | goto out_free_label; |
906 | le->desc = desc; | 907 | le->desc = desc; |
907 | le->eflags = eflags; | 908 | le->eflags = eflags; |
908 | 909 | ||