Error checking for invalid input parameters was too hard. Replace ASSERT with returning error value. Moreover set EtherType only when we are sure it won't be dereferencing NULL pointer.
Signed-off-by: Marcin Wojtas <m...@semihalf.com> --- Silicon/Marvell/Drivers/Net/Pp2Dxe/Pp2Dxe.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Silicon/Marvell/Drivers/Net/Pp2Dxe/Pp2Dxe.c b/Silicon/Marvell/Drivers/Net/Pp2Dxe/Pp2Dxe.c index 8a4c4545c8..deb3f34625 100644 --- a/Silicon/Marvell/Drivers/Net/Pp2Dxe/Pp2Dxe.c +++ b/Silicon/Marvell/Drivers/Net/Pp2Dxe/Pp2Dxe.c @@ -1074,9 +1074,15 @@ Pp2SnpTransmit ( } if (HeaderSize != 0) { - ASSERT (HeaderSize == This->Mode->MediaHeaderSize); - ASSERT (EtherTypePtr != NULL); - ASSERT (DestAddr != NULL); + if (HeaderSize != This->Mode->MediaHeaderSize || + EtherTypePtr == NULL || + DestAddr == NULL) { + return EFI_INVALID_PARAMETER; + } + } + + if (BufferSize < This->Mode->MediaHeaderSize) { + return EFI_BUFFER_TOO_SMALL; } SavedTpl = gBS->RaiseTPL (TPL_CALLBACK); @@ -1100,8 +1106,6 @@ Pp2SnpTransmit ( ReturnUnlock(SavedTpl, EFI_NOT_READY); } - EtherType = HTONS (*EtherTypePtr); - /* Fetch next descriptor */ TxDesc = Mvpp2TxqNextDescGet(AggrTxq); @@ -1118,6 +1122,8 @@ Pp2SnpTransmit ( else CopyMem(DataPtr + NET_ETHER_ADDR_LEN, &This->Mode->CurrentAddress, NET_ETHER_ADDR_LEN); + EtherType = HTONS (*EtherTypePtr); + CopyMem(DataPtr + NET_ETHER_ADDR_LEN * 2, &EtherType, 2); } -- 2.29.0 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#87545): https://edk2.groups.io/g/devel/message/87545 Mute This Topic: https://groups.io/mt/89776256/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-