summary refs log tree commit diff
path: root/devices/src/virtio/rng.rs
diff options
context:
space:
mode:
Diffstat (limited to 'devices/src/virtio/rng.rs')
-rw-r--r--devices/src/virtio/rng.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/devices/src/virtio/rng.rs b/devices/src/virtio/rng.rs
index 4e6448f..17dca69 100644
--- a/devices/src/virtio/rng.rs
+++ b/devices/src/virtio/rng.rs
@@ -51,15 +51,18 @@ impl Worker {
         let mut needs_interrupt = false;
         while let Some(avail_desc) = queue.pop(&self.mem) {
             let index = avail_desc.index;
-            let mut writer = Writer::new(&self.mem, avail_desc);
-            // Fill the entire descriptor chain buffer with random bytes.
-            let written = match writer.write_from(&self.random_file, std::usize::MAX) {
+            let random_file = &mut self.random_file;
+            let written = match Writer::new(&self.mem, avail_desc)
+                .map_err(|e| io::Error::new(io::ErrorKind::InvalidInput, e))
+                .and_then(|mut writer| writer.write_from(random_file, std::usize::MAX))
+            {
                 Ok(n) => n,
                 Err(e) => {
                     warn!("Failed to write random data to the guest: {}", e);
                     0
                 }
             };
+
             queue.add_used(&self.mem, index, written as u32);
             needs_interrupt = true;
         }