Skip to content

Commit 81bc2bc

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 81bc2bc

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

coverage_config_x86_64.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"coverage_score": 87.5,
2+
"coverage_score": 87.6,
33
"exclude_path": "mmap_windows.rs",
44
"crate_features": "backend-mmap,backend-atomic,backend-bitmap"
55
}

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)