Commit 2428d916 authored by Boris Brezillon's avatar Boris Brezillon Committed by Jagan Teki

mtd: Make sure we don't parse MTD partitions belonging to another dev

The mtdparts variable might contain partition definitions for several
MTD devices. Each partition layout is separated by a ';', so let's
make sure we don't pick a wrong name when mtdparts is malformed.

Fixes: 5db66b3a ("cmd: mtd: add 'mtd' command")
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@bootlin.com>
Tested-by: Heiko Schocher's avatarHeiko Schocher <hs@denx.de>
parent 772aa979
......@@ -155,6 +155,7 @@ int mtd_probe_devices(void)
static char *old_mtdids;
const char *mtdparts = get_mtdparts();
const char *mtdids = get_mtdids();
const char *mtdparts_next = mtdparts;
bool remaining_partitions = true;
struct mtd_info *mtd;
......@@ -219,13 +220,22 @@ int mtd_probe_devices(void)
mtdparts += 9;
/* For each MTD device in mtdparts */
while (mtdparts[0] != '\0') {
for (; mtdparts[0] != '\0'; mtdparts = mtdparts_next) {
char mtd_name[MTD_NAME_MAX_LEN], *colon;
struct mtd_partition *parts;
unsigned int mtd_name_len;
int nparts, ret;
mtdparts_next = strchr(mtdparts, ';');
if (!mtdparts_next)
mtdparts_next = mtdparts + strlen(mtdparts);
else
mtdparts_next++;
colon = strchr(mtdparts, ':');
if (colon > mtdparts_next)
colon = NULL;
if (!colon) {
printf("Wrong mtdparts: %s\n", mtdparts);
return -EINVAL;
......@@ -263,10 +273,7 @@ int mtd_probe_devices(void)
if (ret || IS_ERR_OR_NULL(mtd)) {
printf("Could not find a valid device for %s\n",
mtd_name);
mtdparts = strchr(mtdparts, ';');
if (mtdparts)
mtdparts++;
mtdparts = mtdparts_next;
continue;
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment