summary refs log tree commit diff
path: root/kvm/src/lib.rs
diff options
context:
space:
mode:
authorZach Reizner <zachr@google.com>2018-01-30 10:09:21 -0800
committerchrome-bot <chrome-bot@chromium.org>2018-01-30 17:47:18 -0800
commite07bd96ea90edd8a12dcf163f3211cc1ddbe9691 (patch)
tree883304be3bfab7428af3bc7871ee188881a12e41 /kvm/src/lib.rs
parente0983c762535a6c82b1206d4857b17eb9803d38c (diff)
downloadcrosvm-e07bd96ea90edd8a12dcf163f3211cc1ddbe9691.tar
crosvm-e07bd96ea90edd8a12dcf163f3211cc1ddbe9691.tar.gz
crosvm-e07bd96ea90edd8a12dcf163f3211cc1ddbe9691.tar.bz2
crosvm-e07bd96ea90edd8a12dcf163f3211cc1ddbe9691.tar.lz
crosvm-e07bd96ea90edd8a12dcf163f3211cc1ddbe9691.tar.xz
crosvm-e07bd96ea90edd8a12dcf163f3211cc1ddbe9691.tar.zst
crosvm-e07bd96ea90edd8a12dcf163f3211cc1ddbe9691.zip
kvm: fix and test set_identity_map_addr
The kernel expects a pointer to a physical address, not a physical
address directly in the ioctl argument.

TEST=cargo test -p kvm
BUG=chromium:800626

Change-Id: I4a7298149373c00b5b9c634cd1dead7053d053c3
Reviewed-on: https://chromium-review.googlesource.com/893215
Commit-Ready: Zach Reizner <zachr@chromium.org>
Tested-by: Zach Reizner <zachr@chromium.org>
Reviewed-by: Stephen Barber <smbarber@chromium.org>
Diffstat (limited to 'kvm/src/lib.rs')
-rw-r--r--kvm/src/lib.rs10
1 files changed, 9 insertions, 1 deletions
diff --git a/kvm/src/lib.rs b/kvm/src/lib.rs
index be1feec..ef382ef 100644
--- a/kvm/src/lib.rs
+++ b/kvm/src/lib.rs
@@ -342,7 +342,7 @@ impl Vm {
     pub fn set_identity_map_addr(&self, addr: GuestAddress) -> Result<()> {
         // Safe because we know that our file is a VM fd and we verify the return result.
         let ret = unsafe {
-            ioctl_with_val(self, KVM_SET_IDENTITY_MAP_ADDR(), addr.offset() as u64)
+            ioctl_with_ref(self, KVM_SET_IDENTITY_MAP_ADDR(), &(addr.offset() as u64))
         };
         if ret == 0 {
             Ok(())
@@ -1097,4 +1097,12 @@ mod tests {
         assert!(mmap_size >= page_size);
         assert!(mmap_size % page_size == 0);
     }
+
+    #[test]
+    fn set_identity_map_addr() {
+        let kvm = Kvm::new().unwrap();
+        let gm = GuestMemory::new(&vec![(GuestAddress(0), 0x10000)]).unwrap();
+        let vm = Vm::new(&kvm, gm).unwrap();
+        vm.set_identity_map_addr(GuestAddress(0x20000)).unwrap();
+    }
 }