Message ID | 20200424182133.17335-1-pali@kernel.org |
---|---|
State | New |
Headers | show |
Series | lib: strto: Fix parsing MTD partition size | expand |
On Friday 24 April 2020 20:21:33 Pali Roh?r wrote: > Commit 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16 > detection") broke parsing MTD partition sizes specified in decimal base. > > E.g. "128k(bootloader)" is parsed by drivers/mtd/mtdpart.c as hexadecimal > number (0x128 << 10) because character 'a' in substring "bootloader" caused > parsing whole number as hexadecimal. > > This patch stop doing hexadecimal base heuristic on first non-valid > hexadecimal number, so "128k(bootloader)" is parsed as decimal number 128. > > Fixes: 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16...") > Signed-off-by: Pali Roh?r <pali at kernel.org> > --- > lib/strto.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/lib/strto.c b/lib/strto.c > index 1ac2b09c72..060b66b915 100644 > --- a/lib/strto.c > +++ b/lib/strto.c > @@ -30,6 +30,9 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) > > do { > var = tolower(s[i++]); > + if (!(var >= '0' && var <= '9') && > + !(var >= 'a' && var <= 'f')) > + break; > if (var >= 'a' && var <= 'f') { > *base = 16; > break; > -- > 2.20.1 > CC Tom, this problem was detected by my in-progress Travis Nokia N900 test which tries to boot kernel from the OneNAND. Build log is there: https://travis-ci.org/github/u-boot/u-boot/jobs/679007310
On Fri, Apr 24, 2020 at 08:29:41PM +0200, Pali Roh?r wrote: > On Friday 24 April 2020 20:21:33 Pali Roh?r wrote: > > Commit 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16 > > detection") broke parsing MTD partition sizes specified in decimal base. > > > > E.g. "128k(bootloader)" is parsed by drivers/mtd/mtdpart.c as hexadecimal > > number (0x128 << 10) because character 'a' in substring "bootloader" caused > > parsing whole number as hexadecimal. > > > > This patch stop doing hexadecimal base heuristic on first non-valid > > hexadecimal number, so "128k(bootloader)" is parsed as decimal number 128. > > > > Fixes: 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16...") > > Signed-off-by: Pali Roh?r <pali at kernel.org> > > --- > > lib/strto.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/lib/strto.c b/lib/strto.c > > index 1ac2b09c72..060b66b915 100644 > > --- a/lib/strto.c > > +++ b/lib/strto.c > > @@ -30,6 +30,9 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) > > > > do { > > var = tolower(s[i++]); > > + if (!(var >= '0' && var <= '9') && > > + !(var >= 'a' && var <= 'f')) > > + break; > > if (var >= 'a' && var <= 'f') { > > *base = 16; > > break; > > -- > > 2.20.1 > > > > CC Tom, this problem was detected by my in-progress Travis Nokia N900 > test which tries to boot kernel from the OneNAND. Build log is there: > https://travis-ci.org/github/u-boot/u-boot/jobs/679007310 This is the same as: http://patchwork.ozlabs.org/project/uboot/patch/1a681dbefac4c353ad53d7f6cd1a75812036739a.1586333353.git.michal.simek at xilinx.com/ yes? Thanks!
On Friday 24 April 2020 15:12:42 Tom Rini wrote: > On Fri, Apr 24, 2020 at 08:29:41PM +0200, Pali Roh?r wrote: > > On Friday 24 April 2020 20:21:33 Pali Roh?r wrote: > > > Commit 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16 > > > detection") broke parsing MTD partition sizes specified in decimal base. > > > > > > E.g. "128k(bootloader)" is parsed by drivers/mtd/mtdpart.c as hexadecimal > > > number (0x128 << 10) because character 'a' in substring "bootloader" caused > > > parsing whole number as hexadecimal. > > > > > > This patch stop doing hexadecimal base heuristic on first non-valid > > > hexadecimal number, so "128k(bootloader)" is parsed as decimal number 128. > > > > > > Fixes: 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16...") > > > Signed-off-by: Pali Roh?r <pali at kernel.org> > > > --- > > > lib/strto.c | 3 +++ > > > 1 file changed, 3 insertions(+) > > > > > > diff --git a/lib/strto.c b/lib/strto.c > > > index 1ac2b09c72..060b66b915 100644 > > > --- a/lib/strto.c > > > +++ b/lib/strto.c > > > @@ -30,6 +30,9 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) > > > > > > do { > > > var = tolower(s[i++]); > > > + if (!(var >= '0' && var <= '9') && > > > + !(var >= 'a' && var <= 'f')) > > > + break; > > > if (var >= 'a' && var <= 'f') { > > > *base = 16; > > > break; > > > -- > > > 2.20.1 > > > > > > > CC Tom, this problem was detected by my in-progress Travis Nokia N900 > > test which tries to boot kernel from the OneNAND. Build log is there: > > https://travis-ci.org/github/u-boot/u-boot/jobs/679007310 > > This is the same as: > http://patchwork.ozlabs.org/project/uboot/patch/1a681dbefac4c353ad53d7f6cd1a75812036739a.1586333353.git.michal.simek at xilinx.com/ > yes? Thanks! Yes, this is the same problem.
On Fri, Apr 24, 2020 at 09:15:43PM +0200, Pali Roh?r wrote: > On Friday 24 April 2020 15:12:42 Tom Rini wrote: > > On Fri, Apr 24, 2020 at 08:29:41PM +0200, Pali Roh?r wrote: > > > On Friday 24 April 2020 20:21:33 Pali Roh?r wrote: > > > > Commit 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16 > > > > detection") broke parsing MTD partition sizes specified in decimal base. > > > > > > > > E.g. "128k(bootloader)" is parsed by drivers/mtd/mtdpart.c as hexadecimal > > > > number (0x128 << 10) because character 'a' in substring "bootloader" caused > > > > parsing whole number as hexadecimal. > > > > > > > > This patch stop doing hexadecimal base heuristic on first non-valid > > > > hexadecimal number, so "128k(bootloader)" is parsed as decimal number 128. > > > > > > > > Fixes: 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16...") > > > > Signed-off-by: Pali Roh?r <pali at kernel.org> > > > > --- > > > > lib/strto.c | 3 +++ > > > > 1 file changed, 3 insertions(+) > > > > > > > > diff --git a/lib/strto.c b/lib/strto.c > > > > index 1ac2b09c72..060b66b915 100644 > > > > --- a/lib/strto.c > > > > +++ b/lib/strto.c > > > > @@ -30,6 +30,9 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) > > > > > > > > do { > > > > var = tolower(s[i++]); > > > > + if (!(var >= '0' && var <= '9') && > > > > + !(var >= 'a' && var <= 'f')) > > > > + break; > > > > if (var >= 'a' && var <= 'f') { > > > > *base = 16; > > > > break; > > > > -- > > > > 2.20.1 > > > > > > > > > > CC Tom, this problem was detected by my in-progress Travis Nokia N900 > > > test which tries to boot kernel from the OneNAND. Build log is there: > > > https://travis-ci.org/github/u-boot/u-boot/jobs/679007310 > > > > This is the same as: > > http://patchwork.ozlabs.org/project/uboot/patch/1a681dbefac4c353ad53d7f6cd1a75812036739a.1586333353.git.michal.simek at xilinx.com/ > > yes? Thanks! > > Yes, this is the same problem. Can you please test (and Tested-by) that one? Thanks!
On Friday 24 April 2020 15:28:01 Tom Rini wrote: > On Fri, Apr 24, 2020 at 09:15:43PM +0200, Pali Roh?r wrote: > > On Friday 24 April 2020 15:12:42 Tom Rini wrote: > > > On Fri, Apr 24, 2020 at 08:29:41PM +0200, Pali Roh?r wrote: > > > > On Friday 24 April 2020 20:21:33 Pali Roh?r wrote: > > > > > Commit 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16 > > > > > detection") broke parsing MTD partition sizes specified in decimal base. > > > > > > > > > > E.g. "128k(bootloader)" is parsed by drivers/mtd/mtdpart.c as hexadecimal > > > > > number (0x128 << 10) because character 'a' in substring "bootloader" caused > > > > > parsing whole number as hexadecimal. > > > > > > > > > > This patch stop doing hexadecimal base heuristic on first non-valid > > > > > hexadecimal number, so "128k(bootloader)" is parsed as decimal number 128. > > > > > > > > > > Fixes: 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16...") > > > > > Signed-off-by: Pali Roh?r <pali at kernel.org> > > > > > --- > > > > > lib/strto.c | 3 +++ > > > > > 1 file changed, 3 insertions(+) > > > > > > > > > > diff --git a/lib/strto.c b/lib/strto.c > > > > > index 1ac2b09c72..060b66b915 100644 > > > > > --- a/lib/strto.c > > > > > +++ b/lib/strto.c > > > > > @@ -30,6 +30,9 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) > > > > > > > > > > do { > > > > > var = tolower(s[i++]); > > > > > + if (!(var >= '0' && var <= '9') && > > > > > + !(var >= 'a' && var <= 'f')) > > > > > + break; > > > > > if (var >= 'a' && var <= 'f') { > > > > > *base = 16; > > > > > break; > > > > > -- > > > > > 2.20.1 > > > > > > > > > > > > > CC Tom, this problem was detected by my in-progress Travis Nokia N900 > > > > test which tries to boot kernel from the OneNAND. Build log is there: > > > > https://travis-ci.org/github/u-boot/u-boot/jobs/679007310 > > > > > > This is the same as: > > > http://patchwork.ozlabs.org/project/uboot/patch/1a681dbefac4c353ad53d7f6cd1a75812036739a.1586333353.git.michal.simek at xilinx.com/ > > > yes? Thanks! > > > > Yes, this is the same problem. > > Can you please test (and Tested-by) that one? Thanks! It is basically same patch as mine... but ok I'm going to run that my automated Nokia N900 test locally with above patch.
On Friday 24 April 2020 21:33:42 Pali Roh?r wrote: > On Friday 24 April 2020 15:28:01 Tom Rini wrote: > > On Fri, Apr 24, 2020 at 09:15:43PM +0200, Pali Roh?r wrote: > > > On Friday 24 April 2020 15:12:42 Tom Rini wrote: > > > > On Fri, Apr 24, 2020 at 08:29:41PM +0200, Pali Roh?r wrote: > > > > > On Friday 24 April 2020 20:21:33 Pali Roh?r wrote: > > > > > > Commit 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16 > > > > > > detection") broke parsing MTD partition sizes specified in decimal base. > > > > > > > > > > > > E.g. "128k(bootloader)" is parsed by drivers/mtd/mtdpart.c as hexadecimal > > > > > > number (0x128 << 10) because character 'a' in substring "bootloader" caused > > > > > > parsing whole number as hexadecimal. > > > > > > > > > > > > This patch stop doing hexadecimal base heuristic on first non-valid > > > > > > hexadecimal number, so "128k(bootloader)" is parsed as decimal number 128. > > > > > > > > > > > > Fixes: 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16...") > > > > > > Signed-off-by: Pali Roh?r <pali at kernel.org> > > > > > > --- > > > > > > lib/strto.c | 3 +++ > > > > > > 1 file changed, 3 insertions(+) > > > > > > > > > > > > diff --git a/lib/strto.c b/lib/strto.c > > > > > > index 1ac2b09c72..060b66b915 100644 > > > > > > --- a/lib/strto.c > > > > > > +++ b/lib/strto.c > > > > > > @@ -30,6 +30,9 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) > > > > > > > > > > > > do { > > > > > > var = tolower(s[i++]); > > > > > > + if (!(var >= '0' && var <= '9') && > > > > > > + !(var >= 'a' && var <= 'f')) > > > > > > + break; > > > > > > if (var >= 'a' && var <= 'f') { > > > > > > *base = 16; > > > > > > break; > > > > > > -- > > > > > > 2.20.1 > > > > > > > > > > > > > > > > CC Tom, this problem was detected by my in-progress Travis Nokia N900 > > > > > test which tries to boot kernel from the OneNAND. Build log is there: > > > > > https://travis-ci.org/github/u-boot/u-boot/jobs/679007310 > > > > > > > > This is the same as: > > > > http://patchwork.ozlabs.org/project/uboot/patch/1a681dbefac4c353ad53d7f6cd1a75812036739a.1586333353.git.michal.simek at xilinx.com/ > > > > yes? Thanks! > > > > > > Yes, this is the same problem. > > > > Can you please test (and Tested-by) that one? Thanks! > > It is basically same patch as mine... but ok I'm going to run that my > automated Nokia N900 test locally with above patch. That patch is working fine, you can add my Tested-by: Pali Roh?r <pali at kernel.org> for it
diff --git a/lib/strto.c b/lib/strto.c index 1ac2b09c72..060b66b915 100644 --- a/lib/strto.c +++ b/lib/strto.c @@ -30,6 +30,9 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base) do { var = tolower(s[i++]); + if (!(var >= '0' && var <= '9') && + !(var >= 'a' && var <= 'f')) + break; if (var >= 'a' && var <= 'f') { *base = 16; break;
Commit 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16 detection") broke parsing MTD partition sizes specified in decimal base. E.g. "128k(bootloader)" is parsed by drivers/mtd/mtdpart.c as hexadecimal number (0x128 << 10) because character 'a' in substring "bootloader" caused parsing whole number as hexadecimal. This patch stop doing hexadecimal base heuristic on first non-valid hexadecimal number, so "128k(bootloader)" is parsed as decimal number 128. Fixes: 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16...") Signed-off-by: Pali Roh?r <pali at kernel.org> --- lib/strto.c | 3 +++ 1 file changed, 3 insertions(+)