mirror of
https://github.com/embassy-rs/embassy.git
synced 2024-11-25 00:02:28 +00:00
usb: reject instead of panic on CONTROL OUT longer than the buf.
This commit is contained in:
parent
46cffcc8d4
commit
d9b00c01e0
@ -406,6 +406,16 @@ impl<'d, D: Driver<'d>> UsbDevice<'d, D> {
|
|||||||
let max_packet_size = self.control.max_packet_size();
|
let max_packet_size = self.control.max_packet_size();
|
||||||
let mut total = 0;
|
let mut total = 0;
|
||||||
|
|
||||||
|
if req_length > self.control_buf.len() {
|
||||||
|
warn!(
|
||||||
|
"got CONTROL OUT with length {} higher than the control_buf len {}, rejecting.",
|
||||||
|
req_length,
|
||||||
|
self.control_buf.len()
|
||||||
|
);
|
||||||
|
self.control.reject().await;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let chunks = self.control_buf[..req_length].chunks_mut(max_packet_size);
|
let chunks = self.control_buf[..req_length].chunks_mut(max_packet_size);
|
||||||
for (first, last, chunk) in first_last(chunks) {
|
for (first, last, chunk) in first_last(chunks) {
|
||||||
let size = match self.control.data_out(chunk, first, last).await {
|
let size = match self.control.data_out(chunk, first, last).await {
|
||||||
|
Loading…
Reference in New Issue
Block a user