Skip to content

Commit 011988b

Browse files
committed
Adding validation logic to handle_rndis_packet_message
1 parent a1ac181 commit 011988b

File tree

1 file changed

+16
-0
lines changed
  • vm/devices/net/netvsp/src

1 file changed

+16
-0
lines changed

vm/devices/net/netvsp/src/lib.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1891,6 +1891,8 @@ enum WorkerError {
18911891
RndisMessageTooSmall,
18921892
#[error("unsupported rndis behavior")]
18931893
UnsupportedRndisBehavior,
1894+
#[error("invalid lso packet")]
1895+
InvalidLsoPacket(&'static str),
18941896
#[error("vmbus queue error")]
18951897
Queue(#[from] queue::Error),
18961898
#[error("too many control messages")]
@@ -2467,6 +2469,20 @@ impl<T: RingMem> NetChannel<T> {
24672469
});
24682470
}
24692471

2472+
if metadata.offload_tcp_segmentation {
2473+
if segments.len() < 2 {
2474+
return Err(WorkerError::InvalidLsoPacket(
2475+
"LSO requires at least two SGEs",
2476+
));
2477+
}
2478+
let first_segment_size = segments.first().unwrap().len;
2479+
if first_segment_size > 256 {
2480+
return Err(WorkerError::InvalidLsoPacket(
2481+
"LSO requires first SGE to be <= 256 bytes",
2482+
));
2483+
}
2484+
}
2485+
24702486
metadata.segment_count = segments.len() - start;
24712487

24722488
stats.tx_packets.increment();

0 commit comments

Comments
 (0)