1212#![ cfg( all( feature = "bzimage" , any( target_arch = "x86" , target_arch = "x86_64" ) ) ) ]
1313
1414use 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
2019use 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 < ( ) > ;
0 commit comments