Skip to contentSkip to conversation

mtd: mtdpart: fix uninitialized erasesize on MTDPART_OFS_RETAIN error path

PATCH Applied Nikolay Ivchenko 2 participants 2 messages Jun 20 – Jun 29 Memory technology devices (MTD)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mtd: mtdpart: fix uninitialized erasesize on MTDPART_OFS_RETAIN error path

When parsing partition layouts, if a partition requested with MTDPART_OFS_RETAIN runs out of space, the allocator jumps directly to 'out_register' to preserve partition numbering.

However, this jump bypasses child->erasesize initialization, leaving it at zero. When add_mtd_device() is later called on this child, the registration fails and triggers a WARN_ON() due to the zero ->erasesize.

Fix this by zeroing out child->part.offset and child->part.size, and initializing child->erasesize to parent->erasesize. This is the exact same pattern already used just a few lines below in the "out of reach" error check (child->part.offset >= parent_size) to safely register a disabled partition.

---
 drivers/mtd/mtdpart.c | 3 +++
 1 file changed, 3 insertions(+)
drivers/mtd/mtdpart.c +3 -0
index 795a94e6b482..7f23f8a1b59c 100644
@@ -118,6 +118,9 @@ static struct mtd_info *allocate_partition(struct mtd_info *parent,
 				part->name, parent_size - child->part.offset,
 				child->part.size);
 			/* register to preserve ordering */
+			child->part.offset = 0;
+			child->part.size = 0;
+			child->erasesize = parent->erasesize;
 			goto out_register;
 		}
 	}
Signature · 1 line
2.43.0
maintainer Applied
#1 lore raw
Quoted 9 lines · Nikolay Ivchenko

When parsing partition layouts, if a partition requested with MTDPART_OFS_RETAIN runs out of space, the allocator jumps directly to 'out_register' to preserve partition numbering.

However, this jump bypasses child->erasesize initialization, leaving it at zero. When add_mtd_device() is later called on this child, the registration fails and triggers a WARN_ON() due to the zero ->erasesize.

[...]

Applied to mtd/fixes, thanks!

[1/1] mtd: mtdpart: fix uninitialized erasesize on MTDPART_OFS_RETAIN error path

      commit: ae9d8058f13238cad5f5d16f676da91187684581

Patche(s) should be available on mtd/linux.git and will be part of the next PR (provided that no robot complains by then).

Kind regards,
Miquèl