Re: [PATCH v2] mtd: block2mtd: Fix divide error when erase_size is zero
Miquel Raynal <[email protected]>
| Newsgroups | org.infradead.lists.linux-mtd,org.kernel.vger.linux-kernel,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
On 12/08/2026 at 09:52:42 +08, Pei Xiao <[email protected]> wrote: > The erase size is parsed from the "block2mtd" module parameter and can > be set to zero. add_device() then evaluates > > if (size % erase_size) > > with a zero divisor, which triggers a divide error: > > divide error: 0000 [#1] PREEMPT SMP PTI > RIP: 0010:add_device drivers/mtd/devices/block2mtd.c:296 [inline] > RIP: 0010:block2mtd_setup2+0x592/0xda0 drivers/mtd/devices/block2mtd.c:459 > Call Trace: > block2mtd_setup+0x27/0xe0 drivers/mtd/devices/block2mtd.c:476 > param_attr_store+0x214/0x310 kernel/params.c:589 > module_attr_store+0x65/0x90 kernel/params.c:904 > kernfs_fop_write_iter+0x3a4/0x540 fs/kernfs/file.c:345 > ... > > Reject a zero erase size before performing the modulo operation so the > existing "erasesize must be a divisor of device size" error path > reports the invalid argument and frees the device. > > While at it, drop the unnecessary (long) cast from the size operand of > the modulo. > > Fixes: ea6d833a3fdd ("mtd: block2mtd: check device size") > Reported-by: [email protected] > Closes: https://lore.kernel.org/lkml/[email protected]/ > Suggested-by: Jörn Engel <[email protected]> > Cc: [email protected] > Signed-off-by: Pei Xiao <[email protected]> Apparently, removing the cast leads to an unsupported operation with a 64-bit operand on 32-bit architectures (See Sashiko report). I guess it is best to keep that cast in the end. Sorry for the changes back-and-forth. Miquèl ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/