gpio: Remove VLA from stmpe driver
PATCH v3 1/1 gpio: Remove VLA from stmpe driver
The new challenge is to remove VLAs from the kernel (see https://lkml.org/lkml/2018/3/7/621)
The number of GPIOs on the supported chips is fairly small so stack allocate to a known upper bound and spit out a warning if any new chips have more gpios.
---
v3: Split this off from the rest of the series since some of the patches had been picked up. Switched to just hardcoding an upper bound for the stack array since it's only a few extra bytes of stack space.
--- drivers/gpio/gpio-stmpe.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
drivers/gpio/gpio-stmpe.c +8 -1
@@ -363,13 +363,15 @@ static struct irq_chip stmpe_gpio_irq_chip = { .irq_set_type = stmpe_gpio_irq_set_type, }; +#define MAX_GPIOS 24 +static irqreturn_t stmpe_gpio_irq (int irq,void *dev) {struct stmpe_gpio *stmpe_gpio = dev;struct stmpe *stmpe = stmpe_gpio->stmpe;u8 statmsbreg;int num_banks =DIV_ROUND_UP (stmpe->num_gpios,8 ); -u8 status[num_banks]; +u8 status[DIV_ROUND_UP (MAX_GPIOS ,8 )];int ret;int i;
@@ -434,6 +436,11 @@ static int stmpe_gpio_probe(struct platform_device *pdev)struct stmpe_gpio *stmpe_gpio;int ret, irq; +if (stmpe->num_gpios >MAX_GPIOS ) { +dev_err (&pdev->dev,"Need to increase maximum GPIO number\n" ); +return -EINVAL ; + } + stmpe_gpio =kzalloc (sizeof (*stmpe_gpio),GFP_KERNEL );if (!stmpe_gpio)return -ENOMEM ;
Signature · 1 line
2.14.3
Quoted 41 lines · Laura Abbott
The new challenge is to remove VLAs from the kernel (see https://lkml.org/lkml/2018/3/7/621)
The number of GPIOs on the supported chips is fairly small so stack allocate to a known upper bound and spit out a warning if any new chips have more gpios.
Signed-off-by Laura Abbott <[email protected]>---
v3: Split this off from the rest of the series since some of the patches had been picked up. Switched to just hardcoding an upper bound for the stack array since it's only a few extra bytes of stack space.--- drivers/gpio/gpio-stmpe.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)drivers/gpio/gpio-stmpe.c +3
-1@@ -363,13 +363,15 @@ static struct irq_chip stmpe_gpio_irq_chip = { .irq_set_type = stmpe_gpio_irq_set_type, }; +#define MAX_GPIOS 24 +static irqreturn_t stmpe_gpio_irq (int irq,void *dev) {struct stmpe_gpio *stmpe_gpio = dev;struct stmpe *stmpe = stmpe_gpio->stmpe;u8 statmsbreg;int num_banks =DIV_ROUND_UP (stmpe->num_gpios,8 ); -u8 status[num_banks]; +u8 status[DIV_ROUND_UP (MAX_GPIOS ,8 )];int ret;int i;@@ -434,6 +436,11 @@ static int stmpe_gpio_probe(struct platform_device *pdev)struct stmpe_gpio *stmpe_gpio;
drivers/gpio/gpio-stmpe.c static int stmpe_gpio_probe(struct platform_device *pdev) · line 446
Quoted 10 lines
drivers/gpio/gpio-stmpe.c +5
-0int ret, irq; +if (stmpe->num_gpios >MAX_GPIOS ) { +dev_err (&pdev->dev,"Need to increase maximum GPIO number\n" ); +return -EINVAL ; + } + stmpe_gpio =kzalloc (sizeof (*stmpe_gpio),GFP_KERNEL );if (!stmpe_gpio)return -ENOMEM ;
FWIW
Signature · 2 lines
Regards Phil Reid
Quoted 8 lines · Laura Abbott
The new challenge is to remove VLAs from the kernel (see https://lkml.org/lkml/2018/3/7/621)
The number of GPIOs on the supported chips is fairly small so stack allocate to a known upper bound and spit out a warning if any new chips have more gpios.
Signed-off-by Laura Abbott <[email protected]>
Linus, I think this patch is still needed and got missed? Can you take it as well?
Thanks!
-Kees
Quoted 45 lines
---
v3: Split this off from the rest of the series since some of the patches had been picked up. Switched to just hardcoding an upper bound for the stack array since it's only a few extra bytes of stack space.--- drivers/gpio/gpio-stmpe.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)drivers/gpio/gpio-stmpe.c +8
-2@@ -363,13 +363,15 @@ static struct irq_chip stmpe_gpio_irq_chip = { .irq_set_type = stmpe_gpio_irq_set_type, }; +#define MAX_GPIOS 24 +static irqreturn_t stmpe_gpio_irq (int irq,void *dev) {struct stmpe_gpio *stmpe_gpio = dev;struct stmpe *stmpe = stmpe_gpio->stmpe;u8 statmsbreg;int num_banks =DIV_ROUND_UP (stmpe->num_gpios,8 ); -u8 status[num_banks]; +u8 status[DIV_ROUND_UP (MAX_GPIOS ,8 )];int ret;int i;@@ -434,6 +436,11 @@ static int stmpe_gpio_probe(struct platform_device *pdev)struct stmpe_gpio *stmpe_gpio;int ret, irq; +if (stmpe->num_gpios >MAX_GPIOS ) { +dev_err (&pdev->dev,"Need to increase maximum GPIO number\n" ); +return -EINVAL ; + } + stmpe_gpio =kzalloc (sizeof (*stmpe_gpio),GFP_KERNEL );if (!stmpe_gpio)return -ENOMEM ; --2.14.3
Signature · 2 lines
Kees Cook Pixel Security
Quoted 8 lines · Laura Abbott
The new challenge is to remove VLAs from the kernel (see https://lkml.org/lkml/2018/3/7/621)
The number of GPIOs on the supported chips is fairly small so stack allocate to a known upper bound and spit out a warning if any new chips have more gpios.
Signed-off-by Laura Abbott <[email protected]>
Patch applied with the review tags!
Yours,
Linus Walleij