Skip to contentSkip to conversation

mmc: cavium: Fix a shift wrapping bug

PATCH Applied Dan Carpenter 2 participants 2 messages Apr 13, 2017 – Apr 18, 2017

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mmc: cavium: Fix a shift wrapping bug

"dat" is a u64 and "shift" starts as 54 so this is a shift wrapping bug.

Fixes 8047c753f3d3 ("mmc: cavium: Add core MMC driver for Cavium SOCs")
drivers/mmc/host/cavium.c +1 -1
index d842b6986189..54ff1363b564 100644
@@ -733,7 +733,7 @@ static void do_write_request(struct cvm_mmc_host *host, struct mmc_request *mrq)
 		}
 
 		while (smi->consumed < smi->length && shift >= 0) {
-			dat |= ((u8 *)smi->addr)[smi->consumed] << shift;
+			dat |= (u64)((u8 *)smi->addr)[smi->consumed] << shift;
 			bytes_xfered++;
 			smi->consumed++;
 			shift -= 8;
Applied
#1 lore raw
Quoted 4 lines · Dan Carpenter

"dat" is a u64 and "shift" starts as 54 so this is a shift wrapping bug.

Fixes 8047c753f3d3 ("mmc: cavium: Add core MMC driver for Cavium SOCs")

Thanks, applied for next!

Kind regards
Uffe

Quoted 14 lines
drivers/mmc/host/cavium.c +1 -1
index d842b6986189..54ff1363b564 100644
@@ -733,7 +733,7 @@ static void do_write_request(struct cvm_mmc_host *host, struct mmc_request *mrq)
                }
 
                while (smi->consumed < smi->length && shift >= 0) {
-                       dat |= ((u8 *)smi->addr)[smi->consumed] << shift;
+                       dat |= (u64)((u8 *)smi->addr)[smi->consumed] << shift;
                        bytes_xfered++;
                        smi->consumed++;
                        shift -= 8;