Skip to contentSkip to conversation

mdio-mux-gpio: Remove VLA usage

PATCH Superseded Kees Cook 3 participants 5 messages May 30, 2018 – Jun 20, 2018

Subsystems (3)

v2 of 4 Superseded Latest is v4 →

lore
Share & tools
lore

Kees Cook

author
#0 lore raw

PATCH v2 1/1 mdio-mux-gpio: Remove VLA usage

In the quest to remove all stack VLA usage from the kernel[1], this moves the allocation into struct mdio_mux_gpio_state during probe.

[1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA@mail.gmail.com

---
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
index 082ffef0dec4..6b55e0ddef63 100644
@@ -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);
Signature · 6 lines
2.17.0


-- 
Kees Cook
Pixel Security
maintainer Reviewed-by on v2 1/1
#1 lore raw
Quoted 8 lines · Kees Cook

In the quest to remove all stack VLA usage from the kernel[1], this moves the allocation into struct mdio_mux_gpio_state during probe.

[1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA@mail.gmail.com

---
v2: allocate array as part of structure (Andrew Lunn)

Hi Kees

This looks much better, thanks.

Andrew

author
#2 lore raw
Quoted 10 lines · Andrew Lunn
Quoted 8 lines · Kees Cook

In the quest to remove all stack VLA usage from the kernel[1], this moves the allocation into struct mdio_mux_gpio_state during probe.

[1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA@mail.gmail.com

---
v2: allocate array as part of structure (Andrew Lunn)

Quoted 5 lines

Hi Kees

This looks much better, thanks.

Thanks! Who can take this patch? Linus?

-Kees

Signature · 2 lines
Kees Cook
Pixel Security
maintainer
#3 lore raw
Quoted 11 lines · Kees Cook
Quoted 10 lines · Andrew Lunn
Quoted 8 lines · Kees Cook

In the quest to remove all stack VLA usage from the kernel[1], this moves the allocation into struct mdio_mux_gpio_state during probe.

[1] https://lkml.kernel.org/r/CA+55aFzCG-zNmZwX4A2FQpadafLfEzK6CC=qPXydAacU1RqZWA@mail.gmail.com

---
v2: allocate array as part of structure (Andrew Lunn)

Quoted 7 lines
Quoted 5 lines

Hi Kees

This looks much better, thanks.

Thanks! Who can take this patch? Linus?

David Miller.

Does it cleanly apply to net-next?

Andrew

maintainer
#4 lore raw

From: Andrew Lunn <[email protected]>
Date: Wed, 20 Jun 2018 08:32:48 +0200

Quoted 1 line

Does it cleanly apply to net-next?

net-next is closed, so net-next submissions should be sent when it opens back up which should be some time this weekend.

Anything not in "Under Review" state in patchwork always must be resubmitted at the appropriate time.