diff options
author | Iliyan Malchev <malchev@google.com> | 2020-04-17 23:57:47 +0000 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-04-23 20:11:48 +0000 |
commit | ed1498678a80bfdcd844af27d13252d3c3c9f51c (patch) | |
tree | 923f073ddb57386257ed8c7c27239019b41a610d | |
parent | 1160f456a4f21eb7ff11630fdeed224c3b4c56b4 (diff) | |
download | crosvm-ed1498678a80bfdcd844af27d13252d3c3c9f51c.tar crosvm-ed1498678a80bfdcd844af27d13252d3c3c9f51c.tar.gz crosvm-ed1498678a80bfdcd844af27d13252d3c3c9f51c.tar.bz2 crosvm-ed1498678a80bfdcd844af27d13252d3c3c9f51c.tar.lz crosvm-ed1498678a80bfdcd844af27d13252d3c3c9f51c.tar.xz crosvm-ed1498678a80bfdcd844af27d13252d3c3c9f51c.tar.zst crosvm-ed1498678a80bfdcd844af27d13252d3c3c9f51c.zip |
Apply same permissions to pmem-region alignments.
https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1979257 created a padding of read-only pages between the end of the pmem region and padding up to the next multiple of 2MiB. However, on ARM systems, kvm_arch_prepare_memory_region does not permit read-only pages on a write-able memory region. BUG=b:148706939 TEST=Tested on x86_64 and arm64 board with pmem image < 2MiB Tested-by: Iliyan Malchev <malchev@google.com> Change-Id: If06c2e0f74fdcd7db1b7d56e1a8d732d17f352bf Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2153103 Tested-by: Dylan Reid <dgreid@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Dylan Reid <dgreid@chromium.org> Reviewed-by: Stephen Barber <smbarber@chromium.org>
-rw-r--r-- | src/linux.rs | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/linux.rs b/src/linux.rs index c8eb478..6a50449 100644 --- a/src/linux.rs +++ b/src/linux.rs @@ -890,7 +890,7 @@ fn create_pmem_device( .open(&disk.path) .map_err(|e| Error::Disk(disk.path.to_path_buf(), e))?; - let (disk_size, arena_size) = { + let arena_size = { let metadata = std::fs::metadata(&disk.path).map_err(|e| Error::Disk(disk.path.to_path_buf(), e))?; let disk_len = metadata.len(); @@ -905,12 +905,9 @@ fn create_pmem_device( } else { 0 }; - ( - disk_len, - disk_len - .checked_add(align_adjust) - .ok_or(Error::PmemDeviceImageTooBig)?, - ) + disk_len + .checked_add(align_adjust) + .ok_or(Error::PmemDeviceImageTooBig)? }; let protection = { @@ -924,11 +921,10 @@ fn create_pmem_device( let arena = { // Conversion from u64 to usize may fail on 32bit system. let arena_size = usize::try_from(arena_size).map_err(|_| Error::PmemDeviceImageTooBig)?; - let disk_size = usize::try_from(disk_size).map_err(|_| Error::PmemDeviceImageTooBig)?; let mut arena = MemoryMappingArena::new(arena_size).map_err(Error::ReservePmemMemory)?; arena - .add_fd_offset_protection(0, disk_size, &fd, 0, protection) + .add_fd_offset_protection(0, arena_size, &fd, 0, protection) .map_err(Error::ReservePmemMemory)?; arena }; |