[PATCH 1/3] net: dsa: Use devm_ prefixed allocations

Subsystems: networking [dsa], networking [general], the rest

STALE3989d REVIEWED: 9 (9M)

2 review trailers (1 from subsystem maintainers).

7 messages, 3 authors, 2015-10-03 · open the first message on its own page

[PATCH 1/3] net: dsa: Use devm_ prefixed allocations

From: Neil Armstrong <hidden>
Date: 2015-10-02 10:48:11

To simplify and prevent memory leakage when unbinding, use
the devm_ memory allocation calls.

Tested-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Neil Armstrong <redacted>
---
 net/dsa/dsa.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
index c59fa5d..98f94c2 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -305,7 +305,7 @@ static int dsa_switch_setup_one(struct dsa_switch *ds, struct device *parent)
 	if (ret < 0)
 		goto out;

-	ds->slave_mii_bus = mdiobus_alloc();
+	ds->slave_mii_bus = devm_mdiobus_alloc(parent);
 	if (ds->slave_mii_bus == NULL) {
 		ret = -ENOMEM;
 		goto out;
@@ -400,7 +400,7 @@ dsa_switch_setup(struct dsa_switch_tree *dst, int index,
 	/*
 	 * Allocate and initialise switch state.
 	 */
-	ds = kzalloc(sizeof(*ds) + drv->priv_size, GFP_KERNEL);
+	ds = devm_kzalloc(parent, sizeof(*ds) + drv->priv_size, GFP_KERNEL);
 	if (ds == NULL)
 		return ERR_PTR(-ENOMEM);
@@ -883,7 +883,7 @@ static int dsa_probe(struct platform_device *pdev)
 		goto out;
 	}

-	dst = kzalloc(sizeof(*dst), GFP_KERNEL);
+	dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
 	if (dst == NULL) {
 		dev_put(dev);
 		ret = -ENOMEM;
-- 
1.9.1

Re: [PATCH 1/3] net: dsa: Use devm_ prefixed allocations

From: Felix Fietkau <hidden>
Date: 2015-10-02 13:25:19

On 2015-10-02 12:48, Neil Armstrong wrote:
To simplify and prevent memory leakage when unbinding, use
the devm_ memory allocation calls.

Tested-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Neil Armstrong <redacted>
I think you also need to get rid of the corresponding free calls in the
error path, otherwise it will probably crash at some point.

- Felix

Re: [PATCH 1/3] net: dsa: Use devm_ prefixed allocations

From: Sergei Shtylyov <hidden>
Date: 2015-10-02 13:29:45

On 10/2/2015 1:48 PM, Neil Armstrong wrote:
quoted hunk
To simplify and prevent memory leakage when unbinding, use
the devm_ memory allocation calls.

Tested-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Neil Armstrong <redacted>
---
  net/dsa/dsa.c | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
index c59fa5d..98f94c2 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -305,7 +305,7 @@ static int dsa_switch_setup_one(struct dsa_switch *ds, struct device *parent)
  	if (ret < 0)
  		goto out;

-	ds->slave_mii_bus = mdiobus_alloc();
+	ds->slave_mii_bus = devm_mdiobus_alloc(parent);
  	if (ds->slave_mii_bus == NULL) {
  		ret = -ENOMEM;
  		goto out;
@@ -400,7 +400,7 @@ dsa_switch_setup(struct dsa_switch_tree *dst, int index,
  	/*
  	 * Allocate and initialise switch state.
  	 */
-	ds = kzalloc(sizeof(*ds) + drv->priv_size, GFP_KERNEL);
+	ds = devm_kzalloc(parent, sizeof(*ds) + drv->priv_size, GFP_KERNEL);
  	if (ds == NULL)
  		return ERR_PTR(-ENOMEM);
@@ -883,7 +883,7 @@ static int dsa_probe(struct platform_device *pdev)
  		goto out;
  	}

-	dst = kzalloc(sizeof(*dst), GFP_KERNEL);
+	dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
  	if (dst == NULL) {
  		dev_put(dev);
  		ret = -ENOMEM;
    Shouldn't you remove the correspoding kfree(), etc. calls?

MBR, Sergei

Re: [PATCH 1/3] net: dsa: Use devm_ prefixed allocations

From: Neil Armstrong <hidden>
Date: 2015-10-02 13:30:38

On 10/02/2015 03:29 PM, Sergei Shtylyov wrote:
On 10/2/2015 1:48 PM, Neil Armstrong wrote:
quoted
To simplify and prevent memory leakage when unbinding, use
the devm_ memory allocation calls.

Tested-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Neil Armstrong <redacted>
---
  net/dsa/dsa.c | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
index c59fa5d..98f94c2 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -305,7 +305,7 @@ static int dsa_switch_setup_one(struct dsa_switch *ds, struct device *parent)
      if (ret < 0)
          goto out;

-    ds->slave_mii_bus = mdiobus_alloc();
+    ds->slave_mii_bus = devm_mdiobus_alloc(parent);
      if (ds->slave_mii_bus == NULL) {
          ret = -ENOMEM;
          goto out;
@@ -400,7 +400,7 @@ dsa_switch_setup(struct dsa_switch_tree *dst, int index,
      /*
       * Allocate and initialise switch state.
       */
-    ds = kzalloc(sizeof(*ds) + drv->priv_size, GFP_KERNEL);
+    ds = devm_kzalloc(parent, sizeof(*ds) + drv->priv_size, GFP_KERNEL);
      if (ds == NULL)
          return ERR_PTR(-ENOMEM);
@@ -883,7 +883,7 @@ static int dsa_probe(struct platform_device *pdev)
          goto out;
      }

-    dst = kzalloc(sizeof(*dst), GFP_KERNEL);
+    dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
      if (dst == NULL) {
          dev_put(dev);
          ret = -ENOMEM;
   Shouldn't you remove the correspoding kfree(), etc. calls?

MBR, Sergei
The corresponding kfree() calls were all missing.

Neil

Re: [PATCH 1/3] net: dsa: Use devm_ prefixed allocations

From: Sergei Shtylyov <hidden>
Date: 2015-10-02 13:38:01

On 10/2/2015 4:30 PM, Neil Armstrong wrote:
quoted
quoted
To simplify and prevent memory leakage when unbinding, use
the devm_ memory allocation calls.

Tested-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Neil Armstrong <redacted>
---
   net/dsa/dsa.c | 6 +++---
   1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
index c59fa5d..98f94c2 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -305,7 +305,7 @@ static int dsa_switch_setup_one(struct dsa_switch *ds, struct device *parent)
       if (ret < 0)
           goto out;

-    ds->slave_mii_bus = mdiobus_alloc();
+    ds->slave_mii_bus = devm_mdiobus_alloc(parent);
       if (ds->slave_mii_bus == NULL) {
           ret = -ENOMEM;
           goto out;
@@ -400,7 +400,7 @@ dsa_switch_setup(struct dsa_switch_tree *dst, int index,
       /*
        * Allocate and initialise switch state.
        */
-    ds = kzalloc(sizeof(*ds) + drv->priv_size, GFP_KERNEL);
+    ds = devm_kzalloc(parent, sizeof(*ds) + drv->priv_size, GFP_KERNEL);
       if (ds == NULL)
           return ERR_PTR(-ENOMEM);
@@ -883,7 +883,7 @@ static int dsa_probe(struct platform_device *pdev)
           goto out;
       }

-    dst = kzalloc(sizeof(*dst), GFP_KERNEL);
+    dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
       if (dst == NULL) {
           dev_put(dev);
           ret = -ENOMEM;
    Shouldn't you remove the correspoding kfree(), etc. calls?

MBR, Sergei
The corresponding kfree() calls were all missing.
    Then this patch should be for net, not net-next. Either that, or add the 
kfree() calls first, then remove them in this net-next patch.
Neil
MBR, Sergei

Re: [PATCH 1/3] net: dsa: Use devm_ prefixed allocations

From: Felix Fietkau <hidden>
Date: 2015-10-03 12:39:36

On 2015-10-02 15:30, Neil Armstrong wrote:
On 10/02/2015 03:29 PM, Sergei Shtylyov wrote:
quoted
On 10/2/2015 1:48 PM, Neil Armstrong wrote:
quoted
To simplify and prevent memory leakage when unbinding, use
the devm_ memory allocation calls.

Tested-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Neil Armstrong <redacted>
---
  net/dsa/dsa.c | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
index c59fa5d..98f94c2 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -305,7 +305,7 @@ static int dsa_switch_setup_one(struct dsa_switch *ds, struct device *parent)
      if (ret < 0)
          goto out;

-    ds->slave_mii_bus = mdiobus_alloc();
+    ds->slave_mii_bus = devm_mdiobus_alloc(parent);
      if (ds->slave_mii_bus == NULL) {
          ret = -ENOMEM;
          goto out;
@@ -400,7 +400,7 @@ dsa_switch_setup(struct dsa_switch_tree *dst, int index,
      /*
       * Allocate and initialise switch state.
       */
-    ds = kzalloc(sizeof(*ds) + drv->priv_size, GFP_KERNEL);
+    ds = devm_kzalloc(parent, sizeof(*ds) + drv->priv_size, GFP_KERNEL);
      if (ds == NULL)
          return ERR_PTR(-ENOMEM);
@@ -883,7 +883,7 @@ static int dsa_probe(struct platform_device *pdev)
          goto out;
      }

-    dst = kzalloc(sizeof(*dst), GFP_KERNEL);
+    dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
      if (dst == NULL) {
          dev_put(dev);
          ret = -ENOMEM;
   Shouldn't you remove the correspoding kfree(), etc. calls?

MBR, Sergei
The corresponding kfree() calls were all missing.
Not in the error handling path. mdiobus_alloc has a corresponding
mdiobus_free in the same function.
The ds kzalloc in dsa_switch_setup has a kfree in dsa_switch_setup_one.

- Felix

Re: [PATCH 1/3] net: dsa: Use devm_ prefixed allocations

From: Neil Armstrong <hidden>
Date: 2015-10-03 13:55:20

On 10/03/2015 02:39 PM, Felix Fietkau wrote:
On 2015-10-02 15:30, Neil Armstrong wrote:
quoted
On 10/02/2015 03:29 PM, Sergei Shtylyov wrote:
quoted
On 10/2/2015 1:48 PM, Neil Armstrong wrote:
quoted
To simplify and prevent memory leakage when unbinding, use
the devm_ memory allocation calls.

Tested-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Neil Armstrong <redacted>
---
  net/dsa/dsa.c | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
index c59fa5d..98f94c2 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -305,7 +305,7 @@ static int dsa_switch_setup_one(struct dsa_switch *ds, struct device *parent)
      if (ret < 0)
          goto out;

-    ds->slave_mii_bus = mdiobus_alloc();
+    ds->slave_mii_bus = devm_mdiobus_alloc(parent);
      if (ds->slave_mii_bus == NULL) {
          ret = -ENOMEM;
          goto out;
@@ -400,7 +400,7 @@ dsa_switch_setup(struct dsa_switch_tree *dst, int index,
      /*
       * Allocate and initialise switch state.
       */
-    ds = kzalloc(sizeof(*ds) + drv->priv_size, GFP_KERNEL);
+    ds = devm_kzalloc(parent, sizeof(*ds) + drv->priv_size, GFP_KERNEL);
      if (ds == NULL)
          return ERR_PTR(-ENOMEM);
@@ -883,7 +883,7 @@ static int dsa_probe(struct platform_device *pdev)
          goto out;
      }

-    dst = kzalloc(sizeof(*dst), GFP_KERNEL);
+    dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
      if (dst == NULL) {
          dev_put(dev);
          ret = -ENOMEM;
   Shouldn't you remove the correspoding kfree(), etc. calls?

MBR, Sergei
The corresponding kfree() calls were all missing.
Not in the error handling path. mdiobus_alloc has a corresponding
mdiobus_free in the same function.
The ds kzalloc in dsa_switch_setup has a kfree in dsa_switch_setup_one.

- Felix
Thanks Felix & Sergei,

I will repost based on net with an intermediate commit adding the missing kfree calls.

Neil
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help