diff options
author | Zach Reizner <zachr@google.com> | 2018-01-30 10:09:21 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-01-30 17:47:18 -0800 |
commit | e07bd96ea90edd8a12dcf163f3211cc1ddbe9691 (patch) | |
tree | 883304be3bfab7428af3bc7871ee188881a12e41 /kvm/src/lib.rs | |
parent | e0983c762535a6c82b1206d4857b17eb9803d38c (diff) | |
download | crosvm-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.rs | 10 |
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(); + } } |