rmnet: fix PacketLen missing QMAP_UL_CHECKSUM size in QMUX header for QMAP V2/V3/V4#61
Open
5656hcx wants to merge 1 commit into
Open
rmnet: fix PacketLen missing QMAP_UL_CHECKSUM size in QMUX header for QMAP V2/V3/V4#615656hcx wants to merge 1 commit into
5656hcx wants to merge 1 commit into
Conversation
… V2/V3/V4 Signed-off-by: Chenxi Han <chehan@qti.qualcomm.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Analysis
When QMAP V2/V3/V4 (UL checksum offload) is active, each uplink QMAP frame is laid out as:
The
PacketLenfield in the QMAP header tells the device (IPA) where the next frame begins. It should equal everything after the QMAP header:sizeof(QMAP_UL_CHECKSUM) + N + P.The driver was setting
PacketLen = N + P, omittingsizeof(QMAP_UL_CHECKSUM). This caused IPA's frame-boundary pointer to advancesizeof(QMAP_UL_CHECKSUM)bytes too early, so the trailing IP payload bytes were misread as the next QMAP header — producing a corrupt header and a crash:Fix
In
MPUSB_TLPTxPacketandMPUSB_TLPTxPacketEx(MPUsb.c), addsizeof(QMAP_UL_CHECKSUM)toPacketLenwhen a UL checksum header is present:Files Changed
src/windows/ndis/MPUsb.c