Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33853ebd authored by Insu Yun's avatar Insu Yun Committed by Brian Norris
Browse files

mtd: cfi_cmdset_0001: fixing memory leak and handling failed kmalloc



kmalloc needs to be handled when failing in memory pressure.
Also, it has memory leak in error routine.

Signed-off-by: default avatarInsu Yun <wuninsu@gmail.com>
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
parent 32321e95
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -596,7 +596,7 @@ static struct mtd_info *cfi_intelext_setup(struct mtd_info *mtd)
	mtd->size = devsize * cfi->numchips;

	mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips;
	mtd->eraseregions = kmalloc(sizeof(struct mtd_erase_region_info)
	mtd->eraseregions = kzalloc(sizeof(struct mtd_erase_region_info)
			* mtd->numeraseregions, GFP_KERNEL);
	if (!mtd->eraseregions)
		goto setup_err;
@@ -614,6 +614,8 @@ static struct mtd_info *cfi_intelext_setup(struct mtd_info *mtd)
			mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].erasesize = ersize;
			mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].numblocks = ernum;
			mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].lockmap = kmalloc(ernum / 8 + 1, GFP_KERNEL);
			if (!mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].lockmap)
				goto setup_err;
		}
		offset += (ersize * ernum);
	}
@@ -650,6 +652,10 @@ static struct mtd_info *cfi_intelext_setup(struct mtd_info *mtd)
	return mtd;

 setup_err:
	if (mtd->eraseregions)
		for (i=0; i<cfi->cfiq->NumEraseRegions; i++)
			for (j=0; j<cfi->numchips; j++)
				kfree(mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].lockmap);
	kfree(mtd->eraseregions);
	kfree(mtd);
	kfree(cfi->cmdset_priv);