cmd_mem: cleanups, catch bad usage
Currently, memtest will silently accept bad data. Perform error checking on user intput.
Signed-off-by Pavel Machek <[email protected]>
common/cmd_mem.c +19 -15
@@ -994,10 +994,10 @@ static int do_mem_mtest(cmd_tbl_t *cmdtp, int flag, int argc, {ulong start, end;vu_long *buf, *dummy; -int iteration_limit; +int iteration_limit =0 ;int ret;ulong errs =0 ;/* number of errors, or -1 if interrupted */ -ulong pattern; +ulong pattern =0 ;int iteration;#if defined(CONFIG_SYS_ALT_MEMTEST )const int alt_test =1 ;
@@ -1005,25 +1005,29 @@ static int do_mem_mtest(cmd_tbl_t *cmdtp, int flag, int argc,const int alt_test =0 ;#endif + start =CONFIG_SYS_MEMTEST_START ; + end =CONFIG_SYS_MEMTEST_END ; +if (argc >1 ) - start =simple_strtoul (argv[1 ],NULL ,16 ); -else - start =CONFIG_SYS_MEMTEST_START ; +if (strict_strtoul (argv[1 ],16 , &start) <0 ) +return CMD_RET_USAGE ;if (argc >2 ) - end =simple_strtoul (argv[2 ],NULL ,16 ); -else - end =CONFIG_SYS_MEMTEST_END ; +if (strict_strtoul (argv[2 ],16 , &end) <0 ) +return CMD_RET_USAGE ;if (argc >3 ) - pattern = (ulong )simple_strtoul (argv[3 ],NULL ,16 ); -else - pattern =0 ; +if (strict_strtoul (argv[3 ],16 , &pattern) <0 ) +return CMD_RET_USAGE ;if (argc >4 ) - iteration_limit = (ulong )simple_strtoul (argv[4 ],NULL ,16 ); -else - iteration_limit =0 ; +if (strict_strtoul (argv[4 ],16 , &iteration_limit) <0 ) +return CMD_RET_USAGE ; + +if (end < start) { +printf ("Refusing to do empty test\n" ); +return -1 ; + }printf ("Testing %08x ... %08x:\n" , (uint )start, (uint )end); debug("%s:%d: start %#08lx end %#08lx\n", __func__, __LINE__,
@@ -1074,7 +1078,7 @@ static int do_mem_mtest(cmd_tbl_t *cmdtp, int flag, int argc, ret = errs != 0; } -return ret;/* not reached */ +return ret; }#endif /* CONFIG_CMD_MEMTEST */
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Quoted 4 lines · Pavel Machek
Currently, memtest will silently accept bad data. Perform error checking on user intput.
Signed-off-by Pavel Machek <[email protected]>
Ping? Tom, noone replys here, can you take the patch?
Quoted 69 lines
common/cmd_mem.c +19
-15@@ -994,10 +994,10 @@ static int do_mem_mtest(cmd_tbl_t *cmdtp, int flag, int argc, {ulong start, end;vu_long *buf, *dummy; -int iteration_limit; +int iteration_limit =0 ;int ret;ulong errs =0 ;/* number of errors, or -1 if interrupted */ -ulong pattern; +ulong pattern =0 ;int iteration;#if defined(CONFIG_SYS_ALT_MEMTEST )const int alt_test =1 ;@@ -1005,25 +1005,29 @@ static int do_mem_mtest(cmd_tbl_t *cmdtp, int flag, int argc,const int alt_test =0 ;#endif + start =CONFIG_SYS_MEMTEST_START ; + end =CONFIG_SYS_MEMTEST_END ; +if (argc >1 ) - start =simple_strtoul (argv[1 ],NULL ,16 ); -else - start =CONFIG_SYS_MEMTEST_START ; +if (strict_strtoul (argv[1 ],16 , &start) <0 ) +return CMD_RET_USAGE ;if (argc >2 ) - end =simple_strtoul (argv[2 ],NULL ,16 ); -else - end =CONFIG_SYS_MEMTEST_END ; +if (strict_strtoul (argv[2 ],16 , &end) <0 ) +return CMD_RET_USAGE ;if (argc >3 ) - pattern = (ulong )simple_strtoul (argv[3 ],NULL ,16 ); -else - pattern =0 ; +if (strict_strtoul (argv[3 ],16 , &pattern) <0 ) +return CMD_RET_USAGE ;if (argc >4 ) - iteration_limit = (ulong )simple_strtoul (argv[4 ],NULL ,16 ); -else - iteration_limit =0 ; +if (strict_strtoul (argv[4 ],16 , &iteration_limit) <0 ) +return CMD_RET_USAGE ; + +if (end < start) { +printf ("Refusing to do empty test\n" ); +return -1 ; + }printf ("Testing %08x ... %08x:\n" , (uint )start, (uint )end); debug("%s:%d: start %#08lx end %#08lx\n", __func__, __LINE__,@@ -1074,7 +1078,7 @@ static int do_mem_mtest(cmd_tbl_t *cmdtp, int flag, int argc, ret = errs != 0; } -return ret;/* not reached */ +return ret; }#endif /* CONFIG_CMD_MEMTEST */
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
common/cmd_mem.c
Quoted 7 lines · Pavel Machek
Currently, memtest will silently accept bad data. Perform error checking on user intput.
Signed-off-by Pavel Machek <[email protected]>common/cmd_mem.c +0
-0
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150407/521366ab/attachment.sig>