Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mtd: intel-dg: Fix accessing regions before setting nregions

The regions array is counted by nregions, but it's set only after
accessing it:

[] UBSAN: array-index-out-of-bounds in drivers/mtd/devices/mtd_intel_dg.c:750:15
[] index 0 is out of range for type '<unknown> [*]'

Fix it by also fixing an undesired behavior: the loop silently ignores
ENOMEM and continues setting the other entries.

CC: Gustavo A. R. Silva <gustavoars@kernel.org>
CC: Raag Jadav <raag.jadav@intel.com>
Reported-by: Jani Partanen <jiipee@sotapeli.fi>
Closes: https://lore.kernel.org/all/caca6c67-4f1d-49f1-948f-e63b6b937b29@sotapeli.fi
Fixes: ceb5ab3cb646 ("mtd: add driver for intel graphics non-volatile memory device")
Signed-off-by: Lucas De Marchi <demarchi@kernel.org>
Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
Reviewed-by: Raag Jadav <raag.jadav@intel.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>

authored by

Alexander Usyskin and committed by
Miquel Raynal
779c5927 90541270

+6 -3
+6 -3
drivers/mtd/devices/mtd_intel_dg.c
··· 770 770 771 771 kref_init(&nvm->refcnt); 772 772 mutex_init(&nvm->lock); 773 + nvm->nregions = nregions; 773 774 774 775 for (n = 0, i = 0; i < INTEL_DG_NVM_REGIONS; i++) { 775 776 if (!invm->regions[i].name) ··· 778 777 779 778 char *name = kasprintf(GFP_KERNEL, "%s.%s", 780 779 dev_name(&aux_dev->dev), invm->regions[i].name); 781 - if (!name) 782 - continue; 780 + if (!name) { 781 + ret = -ENOMEM; 782 + goto err; 783 + } 784 + 783 785 nvm->regions[n].name = name; 784 786 nvm->regions[n].id = i; 785 787 n++; 786 788 } 787 - nvm->nregions = n; /* in case where kasprintf fail */ 788 789 789 790 ret = devm_pm_runtime_enable(device); 790 791 if (ret < 0) {