gpio: Fix kernel stack leak to userspace
authorLinus Walleij <linus.walleij@linaro.org>
Mon, 22 Jan 2018 12:19:28 +0000 (13:19 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 3 Feb 2018 16:38:48 +0000 (17:38 +0100)
commit 24bd3efc9d1efb5f756a7c6f807a36ddb6adc671 upstream.

The GPIO event descriptor was leaking kernel stack to
userspace because we don't zero the variable before
use. Ooops. Fix this.

Reported-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Bartosz Golaszewski <brgl@bgdev.pl>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpio/gpiolib.c

index eb80dac4e26a52e6f18a4652d3c7fb03451b516a..bdd68ff197dc3fa6614560ab86f63b55841629ba 100644 (file)
@@ -723,6 +723,9 @@ static irqreturn_t lineevent_irq_thread(int irq, void *p)
        struct gpioevent_data ge;
        int ret, level;
 
+       /* Do not leak kernel stack to userspace */
+       memset(&ge, 0, sizeof(ge));
+
        ge.timestamp = ktime_get_real_ns();
        level = gpiod_get_value_cansleep(le->desc);