[haiku-commits] Change in haiku[master]: usb_rndis: fix handling of multiple packets in one USB transaction

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 11 Jun 2022 17:50:43 +0000

From Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>:

Adrien Destugues has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/5377 ;)


Change subject: usb_rndis: fix handling of multiple packets in one USB 
transaction
......................................................................

usb_rndis: fix handling of multiple packets in one USB transaction

I got my pointer math wrong because some things in RNDIS use uint32 as
the base, but some things are in bytes. Most of the time this would result
in an offset past the end of the USB buffer, so it would just lead to
ignoring all but the first packet. But if the first packet was small enough,
it would point somewhere still in the buffer, and we would read the wrong
data.

Should fix #17775
---
M src/add-ons/kernel/drivers/network/ether/usb_rndis/RNDISDevice.cpp
1 file changed, 3 insertions(+), 1 deletion(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/77/5377/1

diff --git a/src/add-ons/kernel/drivers/network/ether/usb_rndis/RNDISDevice.cpp 
b/src/add-ons/kernel/drivers/network/ether/usb_rndis/RNDISDevice.cpp
index 1b17bef..c38e117 100644
--- a/src/add-ons/kernel/drivers/network/ether/usb_rndis/RNDISDevice.cpp
+++ b/src/add-ons/kernel/drivers/network/ether/usb_rndis/RNDISDevice.cpp
@@ -316,7 +316,9 @@
                fReadHeader[1], fReadHeader[2], fReadHeader[3]);

        // Advance to next packet
-       fReadHeader += fReadHeader[1];
+       fReadHeader = (uint32*)((uint8*)fReadHeader + fReadHeader[1]);
+
+       // Are we past the end of the buffer? If so, prepare to receive another 
one on the next read
        if ((uint32)((uint8*)fReadHeader - fReadBuffer) >= fActualLengthRead)
                fReadHeader = NULL;


--
To view, visit https://review.haiku-os.org/c/haiku/+/5377
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I32ec0081336b1f772d4dc3099a0ac2c691aa12f0
Gerrit-Change-Number: 5377
Gerrit-PatchSet: 1
Gerrit-Owner: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: usb_rndis: fix handling of multiple packets in one USB transaction - Gerrit