diff --git a/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.c b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.c index 3b7882d5d7..5b7eda65c3 100644 --- a/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.c +++ b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.c @@ -1412,12 +1412,6 @@ SnpReceive ( PLength = GET_RXSTATUS_PACKET_LENGTH(RxFifoStatus); LanDriver->Stats.RxTotalBytes += (PLength - 4); - // Check buffer size - if (*BuffSize < PLength) { - *BuffSize = PLength; - return EFI_BUFFER_TOO_SMALL; - } - // If padding is applied, read more DWORDs if (PLength % 4) { Padding = 4 - (PLength % 4); @@ -1427,6 +1421,12 @@ SnpReceive ( Padding = 0; } + // Check buffer size + if (*BuffSize < (PLength + Padding)) { + *BuffSize = PLength + Padding; + return EFI_BUFFER_TOO_SMALL; + } + // Set the amount of data to be transfered out of FIFO for THIS packet // This can be used to trigger an interrupt, and status can be checked RxCfgValue = MmioRead32 (LAN9118_RX_CFG);