diff options
Diffstat (limited to 'drivers/gpio/gpiolib-sysfs.c')
| -rw-r--r-- | drivers/gpio/gpiolib-sysfs.c | 8 | 
1 files changed, 8 insertions, 0 deletions
| diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index 26c5466b8179..ae49bb23c6ed 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -458,6 +458,8 @@ static ssize_t export_store(struct class *class,  	long			gpio;  	struct gpio_desc	*desc;  	int			status; +	struct gpio_chip	*gc; +	int			offset;  	status = kstrtol(buf, 0, &gpio);  	if (status < 0) @@ -469,6 +471,12 @@ static ssize_t export_store(struct class *class,  		pr_warn("%s: invalid GPIO %ld\n", __func__, gpio);  		return -EINVAL;  	} +	gc = desc->gdev->chip; +	offset = gpio_chip_hwgpio(desc); +	if (!gpiochip_line_is_valid(gc, offset)) { +		pr_warn("%s: GPIO %ld masked\n", __func__, gpio); +		return -EINVAL; +	}  	/* No extra locking here; FLAG_SYSFS just signifies that the  	 * request and export were done by on behalf of userspace, so | 
