sdio: mmc.c: 防止容量计算过程溢出/Prevent capacity calculation overflow.

修改“mmc_parse_ext_csd”函数,防止容量计算过程溢出。

Modify the "mmc_parse_ext_csd" function to prevent the capacity
calculation process from overflowing.

Signed-off-by: Zhou Yanjie <zhouyanjie@zoho.com>
This commit is contained in:
Zhou Yanjie 2019-07-18 19:57:02 +08:00
parent 9a1be9e73d
commit 976ea24112
1 changed files with 6 additions and 3 deletions

View File

@ -182,6 +182,8 @@ static int mmc_get_ext_csd(struct rt_mmcsd_card *card, rt_uint8_t **new_ext_csd)
*/ */
static int mmc_parse_ext_csd(struct rt_mmcsd_card *card, rt_uint8_t *ext_csd) static int mmc_parse_ext_csd(struct rt_mmcsd_card *card, rt_uint8_t *ext_csd)
{ {
rt_uint64_t card_capacity = 0;
if(card == RT_NULL || ext_csd == RT_NULL) if(card == RT_NULL || ext_csd == RT_NULL)
{ {
LOG_E("emmc parse ext csd fail, invaild args"); LOG_E("emmc parse ext csd fail, invaild args");
@ -191,9 +193,10 @@ static int mmc_parse_ext_csd(struct rt_mmcsd_card *card, rt_uint8_t *ext_csd)
card->flags |= CARD_FLAG_HIGHSPEED; card->flags |= CARD_FLAG_HIGHSPEED;
card->hs_max_data_rate = 200000000; card->hs_max_data_rate = 200000000;
card->card_capacity = *((rt_uint32_t *)&ext_csd[EXT_CSD_SEC_CNT]); card_capacity = *((rt_uint32_t *)&ext_csd[EXT_CSD_SEC_CNT]);
card->card_capacity *= card->card_blksize; card_capacity *= card->card_blksize;
card->card_capacity >>= 10; /* unit:KB */ card_capacity >>= 10; /* unit:KB */
card->card_capacity = card_capacity;
LOG_I("emmc card capacity %d KB.", card->card_capacity); LOG_I("emmc card capacity %d KB.", card->card_capacity);
return 0; return 0;