summary refs log tree commit diff
path: root/devices/src/virtio/balloon.rs
diff options
context:
space:
mode:
Diffstat (limited to 'devices/src/virtio/balloon.rs')
-rw-r--r--devices/src/virtio/balloon.rs22
1 files changed, 20 insertions, 2 deletions
diff --git a/devices/src/virtio/balloon.rs b/devices/src/virtio/balloon.rs
index 633b3fc..ec16f88 100644
--- a/devices/src/virtio/balloon.rs
+++ b/devices/src/virtio/balloon.rs
@@ -94,11 +94,29 @@ impl Worker {
             let index = avail_desc.index;
 
             if inflate {
-                let mut reader = Reader::new(&self.mem, avail_desc);
-                let data_length = reader.available_bytes();
+                let mut reader = match Reader::new(&self.mem, avail_desc) {
+                    Ok(r) => r,
+                    Err(e) => {
+                        error!("balloon: failed to create reader: {}", e);
+                        queue.add_used(&self.mem, index, 0);
+                        needs_interrupt = true;
+                        continue;
+                    }
+                };
+                let data_length = match reader.available_bytes() {
+                    Ok(l) => l,
+                    Err(e) => {
+                        error!("balloon: failed to get available bytes: {}", e);
+                        queue.add_used(&self.mem, index, 0);
+                        needs_interrupt = true;
+                        continue;
+                    }
+                };
 
                 if data_length % 4 != 0 {
                     error!("invalid inflate buffer size: {}", data_length);
+                    queue.add_used(&self.mem, index, 0);
+                    needs_interrupt = true;
                     continue;
                 }