Patchwork [U-Boot] mmc: don't allow extra cmdline arguments

login
register
mail settings
Submitter Stephen Warren
Date April 1, 2013, 9:50 p.m.
Message ID <1364853028-682-1-git-send-email-swarren@wwwdotorg.org>
Download mbox | patch
Permalink /patch/232814/
State Accepted
Delegated to: Tom Rini
Headers show

Comments

Stephen Warren - April 1, 2013, 9:50 p.m.
From: Stephen Warren <swarren@nvidia.com>

The "mmc rescan" command takes no arguments. However, executing
"mmc rescan 1" succeeds, leading the user to believe that MMC device 1
has been rescanned. In fact, the "current" MMC device has been
rescanned, and the current device may well not be 1. Add error-checking
to the "mmc" command to explicitly reject any extra command-line
arguments so that it's more obvious when U-Boot isn't doing what the
user thought they asked it to.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
 common/cmd_mmc.c |   14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
Tom Rini - April 3, 2013, 3:29 p.m.
On Mon, Apr 01, 2013 at 11:50:28AM -0000, Stephen Warren wrote:

> From: Stephen Warren <swarren@nvidia.com>
> 
> The "mmc rescan" command takes no arguments. However, executing
> "mmc rescan 1" succeeds, leading the user to believe that MMC device 1
> has been rescanned. In fact, the "current" MMC device has been
> rescanned, and the current device may well not be 1. Add error-checking
> to the "mmc" command to explicitly reject any extra command-line
> arguments so that it's more obvious when U-Boot isn't doing what the
> user thought they asked it to.
> 
> Signed-off-by: Stephen Warren <swarren@nvidia.com>

Applied to u-boot/master, thanks!

Patch

diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c
index 8c53a10..9f3d6c5 100644
--- a/common/cmd_mmc.c
+++ b/common/cmd_mmc.c
@@ -164,8 +164,12 @@  static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	}
 
 	if (strcmp(argv[1], "rescan") == 0) {
-		struct mmc *mmc = find_mmc_device(curr_device);
+		struct mmc *mmc;
 
+		if (argc != 2)
+			return CMD_RET_USAGE;
+
+		mmc = find_mmc_device(curr_device);
 		if (!mmc) {
 			printf("no mmc device at slot %x\n", curr_device);
 			return 1;
@@ -179,8 +183,12 @@  static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 			return 0;
 	} else if (strncmp(argv[1], "part", 4) == 0) {
 		block_dev_desc_t *mmc_dev;
-		struct mmc *mmc = find_mmc_device(curr_device);
+		struct mmc *mmc;
+
+		if (argc != 2)
+			return CMD_RET_USAGE;
 
+		mmc = find_mmc_device(curr_device);
 		if (!mmc) {
 			printf("no mmc device at slot %x\n", curr_device);
 			return 1;
@@ -196,6 +204,8 @@  static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		puts("get mmc type error!\n");
 		return 1;
 	} else if (strcmp(argv[1], "list") == 0) {
+		if (argc != 2)
+			return CMD_RET_USAGE;
 		print_mmc_devices('\n');
 		return 0;
 	} else if (strcmp(argv[1], "dev") == 0) {