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]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to