Changeset 85146 in vbox
- Timestamp:
- Jul 9, 2020 10:20:38 AM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 139093
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/pdmnetinline.h
r82968 r85146 542 542 case PDMNETWORKGSOTYPE_IPV4_UDP: 543 543 if (iSeg == 0) 544 { 545 if (pGso->offHdr2 + sizeof(RTNETUDP::uh_ulen) > cbFrame) 546 return 0; /* Incomplete UDP header! */ 547 /* uh_ulen cannot exceed cbFrame - pGso->offHdr2 (offset of UDP header) */ 548 if ((unsigned)(pGso->offHdr2 + RT_BE2H_U16(((PCRTNETUDP)&pbFrame[pGso->offHdr2])->uh_ulen)) > cbFrame) 549 if (cbFrame > UINT16_MAX) 550 ((PRTNETUDP)&pbFrame[pGso->offHdr2])->uh_ulen = 0xFFFF; 551 else 552 ((PRTNETUDP)&pbFrame[pGso->offHdr2])->uh_ulen = RT_H2BE_U16((uint16_t)(cbFrame - pGso->offHdr2)); 553 Assert((unsigned)(pGso->offHdr2 + ((PCRTNETUDP)&pbFrame[pGso->offHdr2])->uh_ulen) <= cbFrame); 544 554 pdmNetGsoUpdateUdpHdrUfo(RTNetIPv4PseudoChecksum((PRTNETIPV4)&pbFrame[pGso->offHdr1]), 545 555 pbSegHdrs, pbFrame, pGso->offHdr2); 556 } 546 557 pdmNetGsoUpdateIPv4HdrUfo(pbSegHdrs, pGso->offHdr1, cbSegPayload, iSeg * pGso->cbMaxSeg, 547 558 cbSegHdrs, iSeg + 1 == cSegs); -
trunk/src/VBox/Devices/Network/DevE1000.cpp
r83613 r85146 2474 2474 } 2475 2475 else 2476 { 2476 2477 status.fVP = false; /* Set VP only if we stripped the tag */ 2478 memcpy(rxPacket, pvBuf, cb); 2479 } 2477 2480 } 2478 2481 else … … 3661 3664 pGso->offHdr2 = pCtx->tu.u8CSS; 3662 3665 pGso->cbHdrsTotal = pCtx->dw3.u8HDRLEN; 3663 pGso->cbMaxSeg = pCtx->dw3.u16MSS ;3666 pGso->cbMaxSeg = pCtx->dw3.u16MSS + (pGso->u8Type == PDMNETWORKGSOTYPE_IPV4_UDP ? pGso->offHdr2 : 0); 3664 3667 Assert(PDMNetGsoIsValid(pGso, sizeof(*pGso), pGso->cbMaxSeg * 5)); 3665 3668 E1kLog2(("e1kSetupGsoCtx: mss=%#x hdr=%#x hdrseg=%#x hdr1=%#x hdr2=%#x %s\n", … … 4604 4607 pThis->szPrf, cbFragment, pThis->u16TxPktLen, pTxSg->cbUsed, pTxSg->cbAvailable, 4605 4608 fGso ? "true" : "false")); 4609 PCPDMNETWORKGSO pGso = (PCPDMNETWORKGSO)pTxSg->pvUser; 4610 if (pGso) 4611 { 4612 if (RT_UNLIKELY(pGso->cbMaxSeg == 0)) 4613 { 4614 E1kLog(("%s zero-sized fragments are not allowed\n", pThis->szPrf)); 4615 return false; 4616 } 4617 if (RT_UNLIKELY(pGso->u8Type == PDMNETWORKGSOTYPE_IPV4_UDP)) 4618 { 4619 E1kLog(("%s UDP fragmentation is no longer supported\n", pThis->szPrf)); 4620 return false; 4621 } 4622 } 4606 4623 if (RT_UNLIKELY( !fGso && cbNewPkt > E1K_MAX_TX_PKT_SIZE )) 4607 4624 { … … 5267 5284 default: 5268 5285 AssertMsgFailed(("Impossible descriptor type!")); 5286 continue; 5269 5287 } 5270 5288 if (pDesc->legacy.cmd.fEOP)
Note:
See TracChangeset
for help on using the changeset viewer.