From: Rabin Vincent <rabin@rab.in>
Date: Sun, 5 Apr 2009 08:00:53 +0000 (+0530)
Subject: mmc: check find_mmc_device return value
X-Git-Tag: v2025.01-rc5-pxa1908~21178^2~5
X-Git-Url: http://git.dujemihanovic.xyz/img/static/git-favicon.png?a=commitdiff_plain;h=e85649c7e683faea1ccfddc9fa9abc62f38e4201;p=u-boot.git

mmc: check find_mmc_device return value

find_mmc_device returns NULL if an invalid device number is specified.
Check for this to avoid dereferencing NULL pointers.

Signed-off-by: Rabin Vincent <rabin@rab.in>
---

diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c
index bd55ff1c77..039fe59c75 100644
--- a/common/cmd_mmc.c
+++ b/common/cmd_mmc.c
@@ -149,6 +149,9 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 			int dev = simple_strtoul(argv[2], NULL, 10);
 			struct mmc *mmc = find_mmc_device(dev);
 
+			if (!mmc)
+				return 1;
+
 			mmc_init(mmc);
 
 			return 0;
@@ -175,6 +178,9 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 			u32 blk = simple_strtoul(argv[4], NULL, 16);
 			struct mmc *mmc = find_mmc_device(dev);
 
+			if (!mmc)
+				return 1;
+
 			printf("\nMMC read: dev # %d, block # %d, count %d ... ",
 				dev, blk, cnt);
 
@@ -197,6 +203,9 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 			int blk = simple_strtoul(argv[4], NULL, 16);
 
+			if (!mmc)
+				return 1;
+
 			printf("\nMMC write: dev # %d, block # %d, count %d ... ",
 				dev, blk, cnt);
 
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 7791c3896e..70b4130862 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -846,7 +846,7 @@ block_dev_desc_t *mmc_get_dev(int dev)
 {
 	struct mmc *mmc = find_mmc_device(dev);
 
-	return &mmc->block_dev;
+	return mmc ? &mmc->block_dev : NULL;
 }
 
 int mmc_init(struct mmc *mmc)