• Wolfgang Denk's avatar
    Make sure that argv[] argument pointers are not modified. · 54841ab5
    Wolfgang Denk authored
    The hush shell dynamically allocates (and re-allocates) memory for the
    argument strings in the "char *argv[]" argument vector passed to
    commands.  Any code that modifies these pointers will cause serious
    corruption of the malloc data structures and crash U-Boot, so make
    sure the compiler can check that no such modifications are being done
    by changing the code into "char * const argv[]".
    
    This modification is the result of debugging a strange crash caused
    after adding a new command, which used the following argument
    processing code which has been working perfectly fine in all Unix
    systems since version 6 - but not so in U-Boot:
    
    int main (int argc, char **argv)
    {
    	while (--argc > 0 && **++argv == '-') {
    /* ====> */	while (*++*argv) {
    			switch (**argv) {
    			case 'd':
    				debug++;
    				break;
    			...
    			default:
    				usage ();
    			}
    		}
    	}
    	...
    }
    
    The line marked "====>" will corrupt the malloc data structures and
    usually cause U-Boot to crash when the next command gets executed by
    the shell.  With the modification, the compiler will prevent this with
    an
    	error: increment of read-only location '*argv'
    
    N.B.: The code above can be trivially rewritten like this:
    
    	while (--argc > 0 && **++argv == '-') {
    		char *arg = *argv;
    		while (*++arg) {
    			switch (*arg) {
    			...
    Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
    Acked-by: default avatarMike Frysinger <vapier@gentoo.org>
    54841ab5
Name
Last commit
Last update
..
74xx_7xx Loading commit data...
mpc512x Loading commit data...
mpc5xx Loading commit data...
mpc5xxx Loading commit data...
mpc8220 Loading commit data...
mpc824x Loading commit data...
mpc8260 Loading commit data...
mpc83xx Loading commit data...
mpc85xx Loading commit data...
mpc86xx Loading commit data...
mpc8xx Loading commit data...
mpc8xxx Loading commit data...
ppc4xx Loading commit data...