From 1b8fe72478298ad1efd5d0e1734ec66a52af7f14 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Fri, 3 Nov 2023 21:00:53 +0000 Subject: [PATCH] drop too small ethernet frames --- src/drivers/net/virtio_net.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/drivers/net/virtio_net.rs b/src/drivers/net/virtio_net.rs index 06eeaaaa8b..790cc32114 100644 --- a/src/drivers/net/virtio_net.rs +++ b/src/drivers/net/virtio_net.rs @@ -582,9 +582,21 @@ impl NetworkDriver for VirtioNetDriver { if recv_data.len() == 1 { let mut vec_data: Vec = Vec::with_capacity(self.mtu.into()); let num_buffers = { + const HEADER_SIZE: usize = mem::size_of::(); let packet = recv_data.pop().unwrap(); + + // drop packets with invalid packet size + if packet.len() < HEADER_SIZE { + transfer + .reuse() + .unwrap() + .provide() + .dispatch_await(Rc::clone(&self.recv_vqs.poll_queue), false); + + return None; + } + let header = unsafe { - const HEADER_SIZE: usize = mem::size_of::(); core::mem::transmute::<[u8; HEADER_SIZE], VirtioNetHdr>( packet[..HEADER_SIZE].try_into().unwrap(), )