File tree Expand file tree Collapse file tree 8 files changed +15
-14
lines changed
src/vmm/src/devices/virtio Expand file tree Collapse file tree 8 files changed +15
-14
lines changed Original file line number Diff line number Diff line change @@ -606,8 +606,7 @@ impl VirtioDevice for Balloon {
606606
607607 fn activate ( & mut self , mem : GuestMemoryMmap ) -> Result < ( ) , ActivateError > {
608608 for q in self . queues . iter_mut ( ) {
609- q. initialize ( & mem)
610- . map_err ( ActivateError :: QueueMemoryError ) ?;
609+ q. initialize ( & mem) . map_err ( ActivateError :: QueueError ) ?;
611610 }
612611
613612 self . device_state = DeviceState :: Activated ( mem) ;
Original file line number Diff line number Diff line change @@ -332,8 +332,7 @@ impl<T: VhostUserHandleBackend + Send + 'static> VirtioDevice for VhostUserBlock
332332
333333 fn activate ( & mut self , mem : GuestMemoryMmap ) -> Result < ( ) , ActivateError > {
334334 for q in self . queues . iter_mut ( ) {
335- q. initialize ( & mem)
336- . map_err ( ActivateError :: QueueMemoryError ) ?;
335+ q. initialize ( & mem) . map_err ( ActivateError :: QueueError ) ?;
337336 }
338337
339338 let start_time = get_time_us ( ClockType :: Monotonic ) ;
Original file line number Diff line number Diff line change @@ -628,8 +628,7 @@ impl VirtioDevice for VirtioBlock {
628628
629629 fn activate ( & mut self , mem : GuestMemoryMmap ) -> Result < ( ) , ActivateError > {
630630 for q in self . queues . iter_mut ( ) {
631- q. initialize ( & mem)
632- . map_err ( ActivateError :: QueueMemoryError ) ?;
631+ q. initialize ( & mem) . map_err ( ActivateError :: QueueError ) ?;
633632 }
634633
635634 let event_idx = self . has_feature ( u64:: from ( VIRTIO_RING_F_EVENT_IDX ) ) ;
Original file line number Diff line number Diff line change @@ -72,8 +72,8 @@ pub enum ActivateError {
7272 VhostUser ( vhost_user:: VhostUserError ) ,
7373 /// Setting tap interface offload flags failed: {0}
7474 TapSetOffload ( TapError ) ,
75- /// Error setting pointers in the queue: (0)
76- QueueMemoryError ( QueueError ) ,
75+ /// Error initializing the queue: (0)
76+ QueueError ( QueueError ) ,
7777}
7878
7979/// Trait that helps in upcasting an object to Any
Original file line number Diff line number Diff line change @@ -1000,8 +1000,7 @@ impl VirtioDevice for Net {
10001000
10011001 fn activate ( & mut self , mem : GuestMemoryMmap ) -> Result < ( ) , ActivateError > {
10021002 for q in self . queues . iter_mut ( ) {
1003- q. initialize ( & mem)
1004- . map_err ( ActivateError :: QueueMemoryError ) ?;
1003+ q. initialize ( & mem) . map_err ( ActivateError :: QueueError ) ?;
10051004 }
10061005
10071006 let event_idx = self . has_feature ( u64:: from ( VIRTIO_RING_F_EVENT_IDX ) ) ;
Original file line number Diff line number Diff line change @@ -32,6 +32,8 @@ pub enum QueueError {
3232 DescIndexOutOfBounds ( u16 ) ,
3333 /// Failed to write value into the virtio queue used ring: {0}
3434 MemoryError ( #[ from] vm_memory:: GuestMemoryError ) ,
35+ /// Invalid queue size configured by the driver: max: {0} configured: {1}
36+ InvalidQueueSize ( u16 , u16 ) ,
3537 /// Pointer is not aligned properly: {0:#x} not {1}-byte aligned.
3638 PointerNotAligned ( usize , u8 ) ,
3739}
@@ -322,9 +324,14 @@ impl Queue {
322324 Ok ( slice. ptr_guard_mut ( ) . as_ptr ( ) )
323325 }
324326
327+ /// Do final checks and setup of the queue before it can be usable.
325328 /// Set up pointers to the queue objects in the guest memory
326329 /// and mark memory dirty for those objects
327330 pub fn initialize < M : GuestMemory > ( & mut self , mem : & M ) -> Result < ( ) , QueueError > {
331+ if self . max_size < self . size {
332+ return Err ( QueueError :: InvalidQueueSize ( self . max_size , self . size ) ) ;
333+ }
334+
328335 self . desc_table_ptr = self
329336 . get_slice_ptr ( mem, self . desc_table_address , self . desc_table_size ( ) ) ?
330337 . cast ( ) ;
Original file line number Diff line number Diff line change @@ -294,8 +294,7 @@ impl VirtioDevice for Entropy {
294294
295295 fn activate ( & mut self , mem : GuestMemoryMmap ) -> Result < ( ) , ActivateError > {
296296 for q in self . queues . iter_mut ( ) {
297- q. initialize ( & mem)
298- . map_err ( ActivateError :: QueueMemoryError ) ?;
297+ q. initialize ( & mem) . map_err ( ActivateError :: QueueError ) ?;
299298 }
300299
301300 self . activate_event . write ( 1 ) . map_err ( |_| {
Original file line number Diff line number Diff line change @@ -331,8 +331,7 @@ where
331331
332332 fn activate ( & mut self , mem : GuestMemoryMmap ) -> Result < ( ) , ActivateError > {
333333 for q in self . queues . iter_mut ( ) {
334- q. initialize ( & mem)
335- . map_err ( ActivateError :: QueueMemoryError ) ?;
334+ q. initialize ( & mem) . map_err ( ActivateError :: QueueError ) ?;
336335 }
337336
338337 if self . queues . len ( ) != defs:: VSOCK_NUM_QUEUES {
You can’t perform that action at this time.
0 commit comments