mmc: Fix incorrect handling of 'read' & 'write' commands

If a malformed 'read' or 'write' command is issued, the Sandbox U-Boot
can crash because the command-handling code does no error checking on
the number of provided arguments.

This change makes the mmc 'erase', 'read' and 'write' commands only
function if the proper number of arguments are supplied.

Also puts the else assignment at the beginning fo the if() statement
to shortens the generated code.  This removes an unnecessary jump from
the generated code.

Signed-off-by: Taylor Hutt <thutt@chromium.org>
Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Andy Fleming <afleming@freescale.com>
This commit is contained in:
Taylor Hutt 2012-11-22 09:13:00 +00:00 committed by Andy Fleming
parent 1981539914
commit ed80c931ba
1 changed files with 4 additions and 5 deletions

View File

@ -250,14 +250,13 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
return 0;
}
if (strcmp(argv[1], "read") == 0)
state = MMC_INVALID;
if (argc == 5 && strcmp(argv[1], "read") == 0)
state = MMC_READ;
else if (strcmp(argv[1], "write") == 0)
else if (argc == 5 && strcmp(argv[1], "write") == 0)
state = MMC_WRITE;
else if (strcmp(argv[1], "erase") == 0)
else if (argc == 4 && strcmp(argv[1], "erase") == 0)
state = MMC_ERASE;
else
state = MMC_INVALID;
if (state != MMC_INVALID) {
struct mmc *mmc = find_mmc_device(curr_device);