mdio-mux-gpio: Remove VLA usage
Subsystems (3)
PATCH v4 1/1 mdio-mux-gpio: Remove VLA usage
In the quest to remove all stack VLA usage from the kernel[1], this allocates the values buffer during the callback instead of putting it on the stack.
[1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA@mail.gmail.com
---
v4: use struct_size() helper for allocation (Joe Perches)
v3: resend to netdev with Reviewed-by
v2: allocate array as part of structure (Andrew Lunn)
--- drivers/net/phy/mdio-mux-gpio.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-)
drivers/net/phy/mdio-mux-gpio.c +14 -8
@@ -20,23 +20,23 @@struct mdio_mux_gpio_state {struct gpio_descs *gpios;void *mux_handle; +int values[]; };static int mdio_mux_gpio_switch_fn (int current_child,int desired_child,void *data) {struct mdio_mux_gpio_state *s = data; -int values[s->gpios->ndescs];unsigned int n;if (current_child == desired_child)return 0 ;for (n =0 ; n < s->gpios->ndescs; n++) - values[n] = (desired_child >> n) &1 ; + s->values[n] = (desired_child >> n) &1 ;gpiod_set_array_value_cansleep (s->gpios->ndescs, s->gpios->desc, - values); + s->values);return 0 ; }
@@ -44,15 +44,21 @@ static int mdio_mux_gpio_switch_fn(int current_child, int desired_child,static int mdio_mux_gpio_probe (struct platform_device *pdev) {struct mdio_mux_gpio_state *s; +struct gpio_descs *gpios;int r; - s =devm_kzalloc (&pdev->dev,sizeof (*s),GFP_KERNEL ); -if (!s) + gpios =gpiod_get_array (&pdev->dev,NULL ,GPIOD_OUT_LOW ); +if (IS_ERR (gpios)) +return PTR_ERR (gpios); + + s =devm_kzalloc (&pdev->dev,struct_size (s, values, gpios->ndescs), +GFP_KERNEL ); +if (!s) { +gpiod_put_array (gpios);return -ENOMEM ; + } - s->gpios =gpiod_get_array (&pdev->dev,NULL ,GPIOD_OUT_LOW ); -if (IS_ERR (s->gpios)) -return PTR_ERR (s->gpios); + s->gpios = gpios; r =mdio_mux_init (&pdev->dev, pdev->dev.of_node, mdio_mux_gpio_switch_fn, &s->mux_handle, s,NULL );
Signature · 6 lines
2.17.1 -- Kees Cook Pixel Security
From: Kees Cook <[email protected]>
Date: Mon, 25 Jun 2018 15:49:49 -0700
Quoted 8 lines
In the quest to remove all stack VLA usage from the kernel[1], this allocates the values buffer during the callback instead of putting it on the stack.
[1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA@mail.gmail.com
Signed-off-by Kees Cook <[email protected]>Reviewed-by Andrew Lunn <[email protected]>
Applied.