summaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpiolib.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpio/gpiolib.c')
-rw-r--r--drivers/gpio/gpiolib.c7
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)
628out_put_unused_fd: 629out_put_unused_fd:
629 put_unused_fd(fd); 630 put_unused_fd(fd);
630out_free_descs: 631out_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);
634out_free_lh: 635out_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