[PATCH] lib: strto: Stop detection when invalid char is used

This issue has been found when mtd partition are specified. Autodetection code should stop when the first invalid char is found.
Here is the example of commands: setenv mtdids nand0=memory-controller@e000e000 setenv mtdparts "mtdparts=nand0:4m(boot),4m(env),64m(kernel),96m(rootfs)" mtd list
Before: Zynq> mtd list List of MTD devices: * nand0 - type: NAND flash - block size: 0x20000 bytes - min I/O: 0x800 bytes - OOB size: 64 bytes - OOB available: 16 bytes - ECC strength: 1 bits - ECC step size: 2048 bytes - bitflip threshold: 1 bits - 0x000000000000-0x000010000000 : "nand0" - 0x000000000000-0x000000400000 : "boot" - 0x000000400000-0x000000800000 : "env" - 0x000000800000-0x000006c00000 : "kernel" - 0x000006c00000-0x000010000000 : "rootfs"
Where it is visible that kernel partition has 100m instead of 64m
After: Zynq> mtd list * nand0 - type: NAND flash - block size: 0x20000 bytes - min I/O: 0x800 bytes - OOB size: 64 bytes - OOB available: 16 bytes - ECC strength: 1 bits - ECC step size: 2048 bytes - bitflip threshold: 1 bits - 0x000000000000-0x000010000000 : "nand0" - 0x000000000000-0x000000400000 : "boot" - 0x000000400000-0x000000800000 : "env" - 0x000000800000-0x000004800000 : "kernel" - 0x000004800000-0x00000a800000 : "rootfs"
Signed-off-by: Michal Simek michal.simek@xilinx.com ---
lib/strto.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/lib/strto.c b/lib/strto.c index 1ac2b09c725c..606701566f32 100644 --- a/lib/strto.c +++ b/lib/strto.c @@ -34,6 +34,9 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) *base = 16; break; } + + if (!(var >= '0' && var <= '9')) + break; } while (var); } }

Hello Michal,
Am 08.04.2020 um 10:09 schrieb Michal Simek:
This issue has been found when mtd partition are specified. Autodetection code should stop when the first invalid char is found.
Here is the example of commands: setenv mtdids nand0=memory-controller@e000e000 setenv mtdparts "mtdparts=nand0:4m(boot),4m(env),64m(kernel),96m(rootfs)" mtd list
Before: Zynq> mtd list List of MTD devices:
- nand0
- type: NAND flash
- block size: 0x20000 bytes
- min I/O: 0x800 bytes
- OOB size: 64 bytes
- OOB available: 16 bytes
- ECC strength: 1 bits
- ECC step size: 2048 bytes
- bitflip threshold: 1 bits
- 0x000000000000-0x000010000000 : "nand0"
- 0x000000000000-0x000000400000 : "boot"
- 0x000000400000-0x000000800000 : "env"
- 0x000000800000-0x000006c00000 : "kernel"
- 0x000006c00000-0x000010000000 : "rootfs"
Where it is visible that kernel partition has 100m instead of 64m
After: Zynq> mtd list
- nand0
- type: NAND flash
- block size: 0x20000 bytes
- min I/O: 0x800 bytes
- OOB size: 64 bytes
- OOB available: 16 bytes
- ECC strength: 1 bits
- ECC step size: 2048 bytes
- bitflip threshold: 1 bits
- 0x000000000000-0x000010000000 : "nand0"
- 0x000000000000-0x000000400000 : "boot"
- 0x000000400000-0x000000800000 : "env"
- 0x000000800000-0x000004800000 : "kernel"
- 0x000004800000-0x00000a800000 : "rootfs"
Signed-off-by: Michal Simek michal.simek@xilinx.com
lib/strto.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/lib/strto.c b/lib/strto.c index 1ac2b09c725c..606701566f32 100644 --- a/lib/strto.c +++ b/lib/strto.c @@ -34,6 +34,9 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) *base = 16; break; }
if (!(var >= '0' && var <= '9'))
} }break; } while (var);
Fixes for me same problem, detected on imx6ull based board, thanks!
Tested-by: Heiko Schocher hs@denx.de
for the records: mtdparts before this patch:
=> mtdparts
device nand0 <gpmi-nand>, # parts = 1 #: name size offset mask_flags 0: ubi 0x10000000 0x00000000 0
device nor0 <spi1.0>, # parts = 6 #: name size offset mask_flags 0: spl 0x00019000 0x00000000 0 1: u-boot 0x001da000 0x00019000 0 2: env 0x00019000 0x001f3000 0 3: env-red 0x00019000 0x0020c000 0 4: key 0x00019000 0x00225000 0 5: rescue 0x00dc2000 0x0023e000 0
active partition: nand0,0 - (ubi) 0x10000000 @ 0x00000000
defaults: mtdids : nand0=gpmi-nand,nor0=spi1.0 mtdparts: mtdparts=gpmi-nand:-(ubi);spi1.0:64k(spl),768k(u-boot),64k(env),64k(env-red),64k(key),-(rescue) =>
after
=> mtdparts
device nand0 <gpmi-nand>, # parts = 1 #: name size offset mask_flags 0: ubi 0x10000000 0x00000000 0
device nor0 <spi1.0>, # parts = 6 #: name size offset mask_flags 0: spl 0x00010000 0x00000000 0 1: u-boot 0x000c0000 0x00010000 0 2: env 0x00010000 0x000d0000 0 3: env-red 0x00010000 0x000e0000 0 4: key 0x00010000 0x000f0000 0 5: rescue 0x00f00000 0x00100000 0
active partition: nand0,0 - (ubi) 0x10000000 @ 0x00000000
defaults: mtdids : nand0=gpmi-nand,nor0=spi1.0 mtdparts: mtdparts=gpmi-nand:-(ubi);spi1.0:64k(spl),768k(u-boot),64k(env),64k(env-red),64k(key),-(rescue) =>
bye, Heiko

On Wed, Apr 08, 2020 at 10:09:16AM +0200, Michal Simek wrote:
This issue has been found when mtd partition are specified. Autodetection code should stop when the first invalid char is found.
Here is the example of commands: setenv mtdids nand0=memory-controller@e000e000 setenv mtdparts "mtdparts=nand0:4m(boot),4m(env),64m(kernel),96m(rootfs)" mtd list
Before: Zynq> mtd list List of MTD devices:
- nand0
- type: NAND flash
- block size: 0x20000 bytes
- min I/O: 0x800 bytes
- OOB size: 64 bytes
- OOB available: 16 bytes
- ECC strength: 1 bits
- ECC step size: 2048 bytes
- bitflip threshold: 1 bits
- 0x000000000000-0x000010000000 : "nand0"
- 0x000000000000-0x000000400000 : "boot"
- 0x000000400000-0x000000800000 : "env"
- 0x000000800000-0x000006c00000 : "kernel"
- 0x000006c00000-0x000010000000 : "rootfs"
Where it is visible that kernel partition has 100m instead of 64m
After: Zynq> mtd list
- nand0
- type: NAND flash
- block size: 0x20000 bytes
- min I/O: 0x800 bytes
- OOB size: 64 bytes
- OOB available: 16 bytes
- ECC strength: 1 bits
- ECC step size: 2048 bytes
- bitflip threshold: 1 bits
- 0x000000000000-0x000010000000 : "nand0"
- 0x000000000000-0x000000400000 : "boot"
- 0x000000400000-0x000000800000 : "env"
- 0x000000800000-0x000004800000 : "kernel"
- 0x000004800000-0x00000a800000 : "rootfs"
Signed-off-by: Michal Simek michal.simek@xilinx.com Tested-by: Heiko Schocher hs@denx.de
Applied to u-boot/master, thanks!
participants (3)
-
Heiko Schocher
-
Michal Simek
-
Tom Rini