
On Mon, Nov 22, 2004 at 12:07:18PM +0100, Wolfgang Denk wrote:
There is no explanation what it does or which problem it is supposed to fix.
When CFG_MEMTEST_SCRATCH is undefined alternate memory test in do_mem_mtest (with CFG_ALT_MEMTEST defined) dereferences null pointer. It defines: vu_long *dummy = NULL; and later does: *dummy = ~val;
There is also no CHANGELOG entry.
CHANGELOG * Patch by Ladislav Michl, 22 November 2004 - Fix NULL pointer dereference in alternate memory test (CFG_ALT_MEMTEST) when if no CFG_MEMTEST_SCRATCH area defined
Index: common/cmd_mem.c =================================================================== RCS file: /cvsroot/u-boot/u-boot/common/cmd_mem.c,v retrieving revision 1.19 diff -p -u -r1.19 cmd_mem.c --- common/cmd_mem.c 10 Oct 2004 23:27:33 -0000 1.19 +++ common/cmd_mem.c 22 Nov 2004 11:21:43 -0000 @@ -646,8 +646,9 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int vu_long num_words; #if defined(CFG_MEMTEST_SCRATCH) vu_long *dummy = (vu_long*)CFG_MEMTEST_SCRATCH; +#define write_dummy(val) do { *dummy = ~val; } while (0) #else - vu_long *dummy = NULL; +#define write_dummy(val) do { } while (0) #endif int j; int iterations = 1; @@ -723,7 +724,7 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int val = bitpattern[j]; for(; val != 0; val <<= 1) { *addr = val; - *dummy = ~val; /* clear the test data off of the bus */ + write_dummy(~val); /* clear the test data off of the bus */ readback = *addr; if(readback != val) { printf ("FAILURE (data line): " @@ -731,11 +732,11 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int val, readback); } *addr = ~val; - *dummy = val; + write_dummy(val); readback = *addr; if(readback != ~val) { printf ("FAILURE (data line): " - "Is %08lx, should be %08lx\n", + "is %08lx, should be %08lx\n", readback, ~val); } }