Re: [PATCH v2] mtd: block2mtd: Fix divide error when erase_size is zero

Miquel Raynal <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.drivers.mtd,gmane.linux.kernel.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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.