mmc: cast unsigned int to typeof(sector_t) to avoid unexpected error
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 11 May 2015 07:35:28 +0000 (07:35 +0000)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 1 Jun 2015 07:07:03 +0000 (09:07 +0200)
commit087de9ed3d076d071f09b09ef77d6107c1e1df82
tree9e46d09d423c3baf587d0de1a403b3e933e53178
parentded8a5f9613dbb62cd74f9f26a9caa3193eb3764
mmc: cast unsigned int to typeof(sector_t) to avoid unexpected error

card->csd.capacity is defined as "unsigned int", and sector_t is defined as
"u64" or "unsigned long" (depends on CONFIG_LBDAF). Thus, sector_t data
might have strange data (see below). This patch cast it to typeof(sector_t)
Special thanks to coverity <http://www.coverity.com>

ex) if sector_t was u64

        unsigned int data;
        sector_t sector;

        data = 0x800000;
        sector = (data << 8); // 0xffffffff80000000
        sector = (((typeof(sector_t))data) << 8); // 0x80000000

or

        data = 0x80000000;
        sector = (data << 8); // 0x0
        sector = (((typeof(sector_t))data) << 8); // 0x8000000000

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/card/block.c