* [PATCH v3 net-next] mdio-mux-gpio: Remove VLA usage
@ 2018-06-25 22:09 Kees Cook
2018-06-25 22:23 ` Joe Perches
0 siblings, 1 reply; 3+ messages in thread
From: Kees Cook @ 2018-06-25 22:09 UTC (permalink / raw)
To: David S. Miller; +Cc: linux-kernel, Andrew Lunn, netdev
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 <keescook@chromium.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
v2: allocate array as part of structure (Andrew Lunn)
v3: resend to netdev with Reviewed-by
---
drivers/net/phy/mdio-mux-gpio.c | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/drivers/net/phy/mdio-mux-gpio.c b/drivers/net/phy/mdio-mux-gpio.c
index 082ffef0dec4..6b55e0ddef63 100644
--- a/drivers/net/phy/mdio-mux-gpio.c
+++ b/drivers/net/phy/mdio-mux-gpio.c
@@ -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, sizeof(*s->values) * gpios->ndescs +
+ sizeof(*s), 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);
--
2.17.1
--
Kees Cook
Pixel Security
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH v3 net-next] mdio-mux-gpio: Remove VLA usage
2018-06-25 22:09 [PATCH v3 net-next] mdio-mux-gpio: Remove VLA usage Kees Cook
@ 2018-06-25 22:23 ` Joe Perches
2018-06-25 22:39 ` Kees Cook
0 siblings, 1 reply; 3+ messages in thread
From: Joe Perches @ 2018-06-25 22:23 UTC (permalink / raw)
To: Kees Cook, David S. Miller; +Cc: linux-kernel, Andrew Lunn, netdev
On Mon, 2018-06-25 at 15:09 -0700, Kees Cook wrote:
> 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.
[]
> diff --git a/drivers/net/phy/mdio-mux-gpio.c b/drivers/net/phy/mdio-mux-gpio.c
[]
> @@ -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)
> {
[]
> + s = devm_kzalloc(&pdev->dev, sizeof(*s->values) * gpios->ndescs +
> + sizeof(*s), GFP_KERNEL);
Isn't this supposed to use your new struct_size()
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH v3 net-next] mdio-mux-gpio: Remove VLA usage
2018-06-25 22:23 ` Joe Perches
@ 2018-06-25 22:39 ` Kees Cook
0 siblings, 0 replies; 3+ messages in thread
From: Kees Cook @ 2018-06-25 22:39 UTC (permalink / raw)
To: Joe Perches; +Cc: David S. Miller, LKML, Andrew Lunn, Network Development
On Mon, Jun 25, 2018 at 3:23 PM, Joe Perches <joe@perches.com> wrote:
> On Mon, 2018-06-25 at 15:09 -0700, Kees Cook wrote:
>> 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.
>
> []
>
>> diff --git a/drivers/net/phy/mdio-mux-gpio.c b/drivers/net/phy/mdio-mux-gpio.c
> []
>> @@ -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)
>> {
> []
>> + s = devm_kzalloc(&pdev->dev, sizeof(*s->values) * gpios->ndescs +
>> + sizeof(*s), GFP_KERNEL);
>
> Isn't this supposed to use your new struct_size()
Why yes. Yes it is. :) When treewide changes meet in the night! :)
I'll send a v4.
-Kees
--
Kees Cook
Pixel Security
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-06-25 22:39 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-25 22:09 [PATCH v3 net-next] mdio-mux-gpio: Remove VLA usage Kees Cook
2018-06-25 22:23 ` Joe Perches
2018-06-25 22:39 ` Kees Cook
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox