Skip to content

Commit a7c7aed

Browse files
roypatdependabot[bot]
andcommitted
build: update vm-memory requirement from 0.12.2 to 0.13.0
Updates the requirements on [vm-memory](https://github.com/rust-vmm/vm-memory) to permit the latest version. - [Release notes](https://github.com/rust-vmm/vm-memory/releases) - [Changelog](https://github.com/rust-vmm/vm-memory/blob/main/CHANGELOG.md) - [Commits](rust-vmm/vm-memory@v0.12.2...v0.13.0) --- updated-dependencies: - dependency-name: vm-memory dependency-type: direct:production ... In addition to the dependabot changes, this commit updates usages of deprecated functions. With vm-memory 0.13.0, we introduced versions of the Read and Write traits for operations on guest memory (`VolatileRead` and `VolatileWrite`). These replace various `Read` and `Write` based APIs that had suboptional performance due to requiring to first copy all data from guest memory to hypervisor memory to ensure soundness. See also rust-vmm/vm-memory#217. Signed-off-by: Patrick Roy <roypat@amazon.co.uk> Co-authored-by: dependabot[bot] <support@github.com>
1 parent d421daa commit a7c7aed

File tree

5 files changed

+22
-26
lines changed

5 files changed

+22
-26
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ elf = []
2222
pe = []
2323

2424
[dependencies]
25-
vm-memory = "0.12.2"
25+
vm-memory = "0.13.1"
2626

2727
[dev-dependencies]
2828
criterion = { version = "0.5.1", features = ["html_reports"] }
29-
vm-memory = { version = "0.12.0", features = ["backend-mmap"] }
29+
vm-memory = { version = "0.13.1", features = ["backend-mmap"] }
3030

3131
[[bench]]
3232
name = "main"

src/loader/aarch64/pe/mod.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@
1414

1515
use std::fmt;
1616
use std::io::{Read, Seek, SeekFrom};
17-
use std::mem;
1817

19-
use vm_memory::{Address, ByteValued, Bytes, GuestAddress, GuestMemory, GuestUsize};
18+
use vm_memory::{Address, ByteValued, GuestAddress, GuestMemory, GuestUsize, ReadVolatile};
2019

2120
use super::super::{Error as KernelLoaderError, KernelLoader, KernelLoaderResult, Result};
2221

@@ -112,17 +111,16 @@ impl KernelLoader for PE {
112111
_highmem_start_address: Option<GuestAddress>,
113112
) -> Result<KernelLoaderResult>
114113
where
115-
F: Read + Seek,
114+
F: ReadVolatile + Read + Seek,
116115
{
117116
let kernel_size = kernel_image
118117
.seek(SeekFrom::End(0))
119118
.map_err(|_| Error::SeekImageEnd)? as usize;
120119
let mut arm64_header: arm64_image_header = Default::default();
121120
kernel_image.rewind().map_err(|_| Error::SeekImageHeader)?;
122121

123-
arm64_header
124-
.as_bytes()
125-
.read_from(0, kernel_image, mem::size_of::<arm64_image_header>())
122+
kernel_image
123+
.read_exact(arm64_header.as_mut_slice())
126124
.map_err(|_| Error::ReadImageHeader)?;
127125

128126
if u32::from_le(arm64_header.magic) != 0x644d_5241 {
@@ -156,7 +154,7 @@ impl KernelLoader for PE {
156154

157155
kernel_image.rewind().map_err(|_| Error::SeekImageHeader)?;
158156
guest_mem
159-
.read_exact_from(mem_offset, kernel_image, kernel_size)
157+
.read_exact_volatile_from(mem_offset, kernel_image, kernel_size)
160158
.map_err(|_| Error::ReadKernelImage)?;
161159

162160
loader_result.kernel_end = mem_offset
@@ -182,7 +180,7 @@ pub fn load_dtb<F, M: GuestMemory>(
182180
dtb_image: &mut F,
183181
) -> Result<()>
184182
where
185-
F: Read + Seek,
183+
F: ReadVolatile + Read + Seek,
186184
{
187185
let dtb_size = dtb_image
188186
.seek(SeekFrom::End(0))
@@ -192,7 +190,7 @@ where
192190
}
193191
dtb_image.rewind().map_err(|_| Error::SeekDtbStart)?;
194192
guest_mem
195-
.read_exact_from(guest_addr, dtb_image, dtb_size)
193+
.read_exact_volatile_from(guest_addr, dtb_image, dtb_size)
196194
.map_err(|_| Error::ReadDtbImage.into())
197195
}
198196

src/loader/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use std::io::{Read, Seek};
2424

2525
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
2626
use vm_memory::ByteValued;
27-
use vm_memory::{Address, Bytes, GuestAddress, GuestMemory, GuestUsize};
27+
use vm_memory::{Address, Bytes, GuestAddress, GuestMemory, GuestUsize, ReadVolatile};
2828

2929
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
3030
pub use crate::loader_gen::bootparam;
@@ -176,7 +176,7 @@ pub trait KernelLoader {
176176
highmem_start_address: Option<GuestAddress>,
177177
) -> Result<KernelLoaderResult>
178178
where
179-
F: Read + Seek;
179+
F: Read + ReadVolatile + Seek;
180180
}
181181

182182
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]

src/loader/x86_64/bzimage/mod.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,9 @@
1212
#![cfg(all(feature = "bzimage", any(target_arch = "x86", target_arch = "x86_64")))]
1313

1414
use std::fmt;
15-
use std::io::{Read, Seek, SeekFrom};
16-
use std::mem;
15+
use std::io::{Seek, SeekFrom};
1716

18-
use vm_memory::{Address, ByteValued, Bytes, GuestAddress, GuestMemory, GuestUsize};
17+
use vm_memory::{Address, ByteValued, GuestAddress, GuestMemory, GuestUsize, ReadVolatile};
1918

2019
use super::super::{
2120
bootparam, Error as KernelLoaderError, KernelLoader, KernelLoaderResult, Result,
@@ -108,7 +107,7 @@ impl KernelLoader for BzImage {
108107
highmem_start_address: Option<GuestAddress>,
109108
) -> Result<KernelLoaderResult>
110109
where
111-
F: Read + Seek,
110+
F: ReadVolatile + Seek,
112111
{
113112
let mut kernel_size = kernel_image
114113
.seek(SeekFrom::End(0))
@@ -118,9 +117,8 @@ impl KernelLoader for BzImage {
118117
.map_err(|_| Error::SeekBzImageHeader)?;
119118

120119
let mut boot_header = bootparam::setup_header::default();
121-
boot_header
122-
.as_bytes()
123-
.read_from(0, kernel_image, mem::size_of::<bootparam::setup_header>())
120+
kernel_image
121+
.read_volatile(&mut boot_header.as_bytes())
124122
.map_err(|_| Error::ReadBzImageHeader)?;
125123

126124
// If the `HdrS` magic number is not found at offset 0x202, the boot protocol version is
@@ -172,7 +170,7 @@ impl KernelLoader for BzImage {
172170
.seek(SeekFrom::Start(setup_size as u64))
173171
.map_err(|_| Error::SeekBzImageCompressedKernel)?;
174172
guest_mem
175-
.read_exact_from(mem_offset, kernel_image, kernel_size)
173+
.read_exact_volatile_from(mem_offset, kernel_image, kernel_size)
176174
.map_err(|_| Error::ReadBzImageCompressedKernel)?;
177175

178176
loader_result.kernel_end = mem_offset
@@ -189,7 +187,7 @@ mod tests {
189187
use super::*;
190188

191189
use std::fs::File;
192-
use std::io::Cursor;
190+
use std::io::{Cursor, Read};
193191
use std::process::Command;
194192
use vm_memory::{Address, GuestAddress};
195193
type GuestMemoryMmap = vm_memory::GuestMemoryMmap<()>;

src/loader/x86_64/elf/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use std::io::{Read, Seek, SeekFrom};
1717
use std::mem;
1818
use std::result;
1919

20-
use vm_memory::{Address, ByteValued, Bytes, GuestAddress, GuestMemory, GuestUsize};
20+
use vm_memory::{Address, ByteValued, GuestAddress, GuestMemory, GuestUsize, ReadVolatile};
2121

2222
use crate::loader::{Error as KernelLoaderError, KernelLoader, KernelLoaderResult, Result};
2323
use crate::loader_gen::elf;
@@ -205,7 +205,7 @@ impl KernelLoader for Elf {
205205
highmem_start_address: Option<GuestAddress>,
206206
) -> Result<KernelLoaderResult>
207207
where
208-
F: Read + Seek,
208+
F: Read + ReadVolatile + Seek,
209209
{
210210
kernel_image.rewind().map_err(|_| Error::SeekElfStart)?;
211211

@@ -281,7 +281,7 @@ impl KernelLoader for Elf {
281281
};
282282

283283
guest_mem
284-
.read_exact_from(mem_offset, kernel_image, phdr.p_filesz as usize)
284+
.read_exact_volatile_from(mem_offset, kernel_image, phdr.p_filesz as usize)
285285
.map_err(|_| Error::ReadKernelImage)?;
286286

287287
let kernel_end = mem_offset
@@ -309,7 +309,7 @@ const PVH_NOTE_STR_SZ: usize = 4;
309309
/// are found in the note header.
310310
fn parse_elf_note<F>(phdr: &elf::Elf64_Phdr, kernel_image: &mut F) -> Result<PvhBootCapability>
311311
where
312-
F: Read + Seek,
312+
F: Read + ReadVolatile + Seek,
313313
{
314314
// Type of note header that encodes a 32-bit entry point address to boot a guest kernel using
315315
// the PVH boot protocol.

0 commit comments

Comments
 (0)