Skip to content

Commit a55d00e

Browse files
committed
bitmap/GuestMemory: fix false positive in read_from
Before, if we didn't succeed to read all `len` bytes, we would've marked as dirty more bytes than needed. Signed-off-by: Laura Loghin <[email protected]>
1 parent 5bd7138 commit a55d00e

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

src/guest_memory.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -853,16 +853,16 @@ impl<T: GuestMemory> Bytes<GuestAddress> for T {
853853
// record the dirty status of the written range below.
854854
let start = caddr.raw_value() as usize;
855855
let end = start + len;
856-
let result = loop {
856+
let bytes_read = loop {
857857
match src.read(&mut dst[start..end]) {
858-
Ok(n) => break Ok(n),
858+
Ok(n) => break n,
859859
Err(ref e) if e.kind() == std::io::ErrorKind::Interrupted => continue,
860-
Err(e) => break Err(Error::IOError(e)),
860+
Err(e) => return Err(Error::IOError(e)),
861861
}
862862
};
863863

864-
region.bitmap().mark_dirty(start, len);
865-
result
864+
region.bitmap().mark_dirty(start, bytes_read);
865+
Ok(bytes_read)
866866
} else {
867867
let len = std::cmp::min(len, MAX_ACCESS_CHUNK);
868868
let mut buf = vec![0u8; len].into_boxed_slice();

0 commit comments

Comments
 (0)