Commit 8cf5dd23 authored by Prasanna Kumar T S M's avatar Prasanna Kumar T S M Committed by Borislav Petkov (AMD)
Browse files

EDAC/versalnet: Fix device name memory leak



The device name allocated via kzalloc() in init_one_mc() is assigned to
dev->init_name but never freed on the normal removal path.  device_register()
copies init_name and then sets dev->init_name to NULL, so the name pointer
becomes unreachable from the device. Thus leaking memory.

Use a stack-local char array instead of using kzalloc() for name.

Fixes: d5fe2fec ("EDAC: Add a driver for the AMD Versal NET DDR controller")
Signed-off-by: default avatarPrasanna Kumar T S M <ptsm@linux.microsoft.com>
Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20260401111856.2342975-1-ptsm@linux.microsoft.com
parent 7fd2df20
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -777,9 +777,9 @@ static int init_one_mc(struct mc_priv *priv, struct platform_device *pdev, int i
	u32 num_chans, rank, dwidth, config;
	struct edac_mc_layer layers[2];
	struct mem_ctl_info *mci;
	char name[MC_NAME_LEN];
	struct device *dev;
	enum dev_type dt;
	char *name;
	int rc;

	config = priv->adec[CONF + i * ADEC_NUM];
@@ -813,13 +813,9 @@ static int init_one_mc(struct mc_priv *priv, struct platform_device *pdev, int i
	layers[1].is_virt_csrow = false;

	rc = -ENOMEM;
	name = kzalloc(MC_NAME_LEN, GFP_KERNEL);
	if (!name)
		return rc;

	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
	if (!dev)
		goto err_name_free;
		return rc;

	mci = edac_mc_alloc(i, ARRAY_SIZE(layers), layers, sizeof(struct mc_priv));
	if (!mci) {
@@ -858,8 +854,6 @@ static int init_one_mc(struct mc_priv *priv, struct platform_device *pdev, int i
	edac_mc_free(mci);
err_dev_free:
	kfree(dev);
err_name_free:
	kfree(name);

	return rc;
}