diff --git a/zircon/system/dev/block/sdmmc/sdmmc-block-device.cpp b/zircon/system/dev/block/sdmmc/sdmmc-block-device.cpp
index 15ab982bcd78d12517db8d46ae071879804307a7..d8f637a36f61a374d6a9030fbf99f949c522dacc 100644
--- a/zircon/system/dev/block/sdmmc/sdmmc-block-device.cpp
+++ b/zircon/system/dev/block/sdmmc/sdmmc-block-device.cpp
@@ -177,8 +177,8 @@ void SdmmcBlockDevice::DoTxn(BlockOperation* txn) {
     req->blocksize = static_cast<uint16_t>(block_info_.block_size);
 
     // convert offset_vmo and length to bytes
-    txn->operation()->rw.offset_vmo *= block_info_.block_size;
-    txn->operation()->rw.length *= block_info_.block_size;
+    uint64_t offset_vmo = txn->operation()->rw.offset_vmo * block_info_.block_size;
+    uint64_t length = txn->operation()->rw.length * block_info_.block_size;
 
     fzl::VmoMapper mapper;
 
@@ -188,18 +188,18 @@ void SdmmcBlockDevice::DoTxn(BlockOperation* txn) {
         req->virt_buffer = nullptr;
         req->pmt = ZX_HANDLE_INVALID;
         req->dma_vmo = txn->operation()->rw.vmo;
-        req->buf_offset = txn->operation()->rw.offset_vmo;
+        req->buf_offset = offset_vmo;
     } else {
         req->use_dma = false;
-        st = mapper.Map(*zx::unowned_vmo(txn->operation()->rw.vmo), txn->operation()->rw.offset_vmo,
-                        txn->operation()->rw.length, ZX_VM_PERM_READ | ZX_VM_PERM_WRITE);
+        st = mapper.Map(*zx::unowned_vmo(txn->operation()->rw.vmo), offset_vmo, length,
+                        ZX_VM_PERM_READ | ZX_VM_PERM_WRITE);
         if (st != ZX_OK) {
             zxlogf(TRACE, "sdmmc: do_txn vmo map error %d\n", st);
             BlockComplete(txn, st, async_id_);
             return;
         }
         req->virt_buffer = mapper.start();
-        req->virt_size = txn->operation()->rw.length;
+        req->virt_size = length;
     }
 
     st = sdmmc_.host().Request(req);