From 2570ea69db873522ed1acce07eba859f49b55e24 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Tue, 6 Jan 2026 04:58:04 -0300 Subject: [PATCH] uvc: clamp payload and accept host probe --- server/src/bin/lesavka-uvc.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/server/src/bin/lesavka-uvc.rs b/server/src/bin/lesavka-uvc.rs index ef42745..e1627b7 100644 --- a/server/src/bin/lesavka-uvc.rs +++ b/server/src/bin/lesavka-uvc.rs @@ -198,6 +198,8 @@ impl UvcConfig { let interval = env_u32("LESAVKA_UVC_INTERVAL", 0); let mut max_packet = env_u32("LESAVKA_UVC_MAXPACKET", 3072); if env::var("LESAVKA_UVC_BULK").is_ok() { + max_packet = max_packet.min(512); + } else { max_packet = max_packet.min(1024); } @@ -386,6 +388,7 @@ fn sanitize_streaming_control(data: &[u8], state: &UvcState) -> [u8; STREAM_CTRL let format_index = data[2]; let frame_index = data[3]; let interval = read_le32(data, 4); + let host_payload = read_le32(data, 22); if format_index == 1 { out[2] = 1; @@ -396,6 +399,10 @@ fn sanitize_streaming_control(data: &[u8], state: &UvcState) -> [u8; STREAM_CTRL if interval == state.cfg.interval { write_le32(&mut out[4..8], interval); } + if host_payload > 0 { + let payload = host_payload.min(state.cfg.max_packet); + write_le32(&mut out[22..26], payload); + } } out }