Skip to content

Commit 17cdc51

Browse files
MadhavanJeymergify[bot]
authored andcommitted
NetworkPkg/IScsiDxe:Fix for Remote Memory Exposure in ISCSI bz4206
Used SafeUint32Add to calculate and validate OutTransferLength with boundary check in IScsiOnR2TRcvd to avoid integer overflow Signed-off-by: Madhavan <[email protected]>
1 parent 2fe270a commit 17cdc51

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

NetworkPkg/IScsiDxe/IScsiProto.c

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/** @file
22
The implementation of iSCSI protocol based on RFC3720.
33
4-
Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
4+
Copyright (c) 2004 - 2025, Intel Corporation. All rights reserved.<BR>
55
SPDX-License-Identifier: BSD-2-Clause-Patent
66
77
**/
@@ -2682,6 +2682,7 @@ IScsiOnR2TRcvd (
26822682
EFI_STATUS Status;
26832683
ISCSI_XFER_CONTEXT *XferContext;
26842684
UINT8 *Data;
2685+
UINT32 TransferLength;
26852686

26862687
R2THdr = (ISCSI_READY_TO_TRANSFER *)NetbufGetByte (Pdu, 0, NULL);
26872688
if (R2THdr == NULL) {
@@ -2712,7 +2713,12 @@ IScsiOnR2TRcvd (
27122713
XferContext->Offset = R2THdr->BufferOffset;
27132714
XferContext->DesiredLength = R2THdr->DesiredDataTransferLength;
27142715

2715-
if (((XferContext->Offset + XferContext->DesiredLength) > Packet->OutTransferLength) ||
2716+
Status = SafeUint32Add (XferContext->Offset, XferContext->DesiredLength, &TransferLength);
2717+
if (EFI_ERROR (Status)) {
2718+
return EFI_PROTOCOL_ERROR;
2719+
}
2720+
2721+
if ((TransferLength > Packet->OutTransferLength) ||
27162722
(XferContext->DesiredLength > Tcb->Conn->Session->MaxBurstLength)
27172723
)
27182724
{

0 commit comments

Comments
 (0)