From: Bartosz Golaszewski Date: Fri, 9 Jun 2017 11:41:26 +0000 (+0200) Subject: gpio: mockup: tweak gpio_mockup_event_write() X-Git-Tag: v4.13-rc1~116^2~22 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=650b57b083ef22208c1d10e554f964571221bca4;p=karo-tx-linux.git gpio: mockup: tweak gpio_mockup_event_write() Invert the logic of the irq_enabled check and only access the private data after the input is sanitized. Signed-off-by: Bartosz Golaszewski Reviewed-by: Andy Shevchenko Signed-off-by: Linus Walleij --- diff --git a/drivers/gpio/gpio-mockup.c b/drivers/gpio/gpio-mockup.c index da76267aa85c..d78e8e081f5a 100644 --- a/drivers/gpio/gpio-mockup.c +++ b/drivers/gpio/gpio-mockup.c @@ -210,24 +210,23 @@ static ssize_t gpio_mockup_event_write(struct file *file, struct gpio_chip *gc; int rv, val; - sfile = file->private_data; - priv = sfile->private; - desc = priv->desc; - chip = priv->chip; - gc = &chip->gc; - rv = kstrtoint_from_user(usr_buf, size, 0, &val); if (rv) return rv; if (val != 0 && val != 1) return -EINVAL; - if (!chip->lines[priv->offset].irq_enabled) - return size; + sfile = file->private_data; + priv = sfile->private; + desc = priv->desc; + chip = priv->chip; + gc = &chip->gc; - gpiod_set_value_cansleep(desc, val); - priv->chip->irq_ctx.irq = gc->irq_base + priv->offset; - irq_work_queue(&priv->chip->irq_ctx.work); + if (chip->lines[priv->offset].irq_enabled) { + gpiod_set_value_cansleep(desc, val); + priv->chip->irq_ctx.irq = gc->irq_base + priv->offset; + irq_work_queue(&priv->chip->irq_ctx.work); + } return size; }