]> git.baikalelectronics.ru Git - kernel.git/commit
gpio: 74x164: Fix crash during .remove()
authorGeert Uytterhoeven <geert+renesas@glider.be>
Tue, 21 Nov 2017 14:18:10 +0000 (15:18 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 30 Nov 2017 14:31:14 +0000 (15:31 +0100)
commita83e5dc54768f262722401504b79d476423a4e4b
tree53fd20133bc23a2442b24d7873f6d34955a81c41
parentf9e9d4ede33f20ad238fc11db0232eaede684940
gpio: 74x164: Fix crash during .remove()

Commit ffb8317a0cd5ff47 ("gpio: 74x164: Introduce 'enable-gpios'
property") added a new member gpiod_oe to the end of the struct
gen_74x164_chip, after the zero-length buffer array.

However, this buffer is a flexible array, allocated together with the
structure during .probe().  As the buffer is no longer the last member,
writing to it corrupts the newly added member after it.
During device removal, the corrupted member will be used as a pointer,
leading to a crash.

This went unnoticed, as the flexible array was declared as "buffer[0]"
instead of "buffer[]", and thus did not trigger a "flexible array member
not at end of struct" error from gcc.

Move the gpiod_oe field up to fix this, and drop the zero from the array
size to prevent future similar bugs.

Fixes: ffb8317a0cd5ff47 ("gpio: 74x164: Introduce 'enable-gpios' property")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-74x164.c