diff mbox

libnvdimm: fix dereference on null devs on error exit path

Message ID 20161015153214.26783-1-colin.king@canonical.com (mailing list archive)
State New, archived
Headers show

Commit Message

Colin King Oct. 15, 2016, 3:32 p.m. UTC
From: Colin Ian King <colin.king@canonical.com>

If devs cannot be allocated then the error exit path jumps to
a cleanup loop that iterates over a null array of devs which
is incorrect.  Fix this by jumping instead to the end of the
function where NULL is returned.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 drivers/nvdimm/namespace_devs.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Dan Williams Oct. 15, 2016, 3:49 p.m. UTC | #1
On Sat, Oct 15, 2016 at 8:32 AM, Colin King <colin.king@canonical.com> wrote:
> From: Colin Ian King <colin.king@canonical.com>
>
> If devs cannot be allocated then the error exit path jumps to
> a cleanup loop that iterates over a null array of devs which
> is incorrect.  Fix this by jumping instead to the end of the
> function where NULL is returned.
>
> Signed-off-by: Colin Ian King <colin.king@canonical.com>

Thanks, I've already applied a similar fix from Dan Carpenter.
diff mbox

Patch

diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c
index 3509cff..5d2755a 100644
--- a/drivers/nvdimm/namespace_devs.c
+++ b/drivers/nvdimm/namespace_devs.c
@@ -2125,7 +2125,7 @@  static struct device **scan_labels(struct nd_region *nd_region)
 
 		devs = kcalloc(2, sizeof(dev), GFP_KERNEL);
 		if (!devs)
-			goto err;
+			goto err_ret;
 		if (is_nd_blk(&nd_region->dev)) {
 			struct nd_namespace_blk *nsblk;
 
@@ -2182,6 +2182,7 @@  static struct device **scan_labels(struct nd_region *nd_region)
 		else
 			namespace_pmem_release(devs[i]);
 	kfree(devs);
+ err_ret:
 	return NULL;
 }