|
@@ -444,12 +444,19 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
|
|
|
struct linehandle_state *lh;
|
|
|
struct file *file;
|
|
|
int fd, i, ret;
|
|
|
+ u32 lflags;
|
|
|
|
|
|
if (copy_from_user(&handlereq, ip, sizeof(handlereq)))
|
|
|
return -EFAULT;
|
|
|
if ((handlereq.lines == 0) || (handlereq.lines > GPIOHANDLES_MAX))
|
|
|
return -EINVAL;
|
|
|
|
|
|
+ lflags = handlereq.flags;
|
|
|
+
|
|
|
+ /* Return an error if an unknown flag is set */
|
|
|
+ if (lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
lh = kzalloc(sizeof(*lh), GFP_KERNEL);
|
|
|
if (!lh)
|
|
|
return -ENOMEM;
|
|
@@ -470,7 +477,6 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
|
|
|
/* Request each GPIO */
|
|
|
for (i = 0; i < handlereq.lines; i++) {
|
|
|
u32 offset = handlereq.lineoffsets[i];
|
|
|
- u32 lflags = handlereq.flags;
|
|
|
struct gpio_desc *desc;
|
|
|
|
|
|
if (offset >= gdev->ngpio) {
|
|
@@ -478,12 +484,6 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
|
|
|
goto out_free_descs;
|
|
|
}
|
|
|
|
|
|
- /* Return an error if a unknown flag is set */
|
|
|
- if (lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS) {
|
|
|
- ret = -EINVAL;
|
|
|
- goto out_free_descs;
|
|
|
- }
|
|
|
-
|
|
|
desc = &gdev->descs[offset];
|
|
|
ret = gpiod_request(desc, lh->label);
|
|
|
if (ret)
|