On Wed, Feb 19, 2025 at 10:03 PM Kai <kai.k...@windriver.com> wrote:
>
> On 2/19/25 23:19, Steve Sakoman wrote:
> > Hi Kai,
> >
> > Not sure why, but this fails to apply for me:
> >
> > Applying: Revert "ovmf: Fix CVE-2023-45237"
> > Using index info to reconstruct a base tree...
> > error: patch failed: meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0001.patch:1
> > error: meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0001.patch: patch
> > does not apply
> > error: patch failed: meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0002.patch:1
> > error: meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0002.patch: patch
> > does not apply
> > error: Did you hand edit your patch?
> > It does not apply to blobs recorded in its index.
> > Patch failed at 0001 Revert "ovmf: Fix CVE-2023-45237"
>
> Hi Steve,
>
> How about try option `--keep-cr` with git am as I mentioned in the patch
> file?

I did use that option:

$ git am --keep-cr
~/Downloads/kirkstone-1-2-Revert-ovmf-Fix-CVE-2023-45237.patch
Applying: Revert "ovmf: Fix CVE-2023-45237"
error: patch failed: meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0001.patch:1
error: meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0001.patch: patch
does not apply
error: patch failed: meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0002.patch:1
error: meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0002.patch: patch
does not apply
Patch failed at 0001 Revert "ovmf: Fix CVE-2023-45237"
hint: Use 'git am --show-current-patch=diff' to see the failed patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

I'll just directly revert these two commits and copy/paste your text
into the revert message.

Steve

> > On Wed, Feb 19, 2025 at 2:22 AM Kai Kang via lists.openembedded.org
> > <kai.kang=windriver....@lists.openembedded.org> wrote:
> >> From: Kai Kang <kai.k...@windriver.com>
> >>
> >> This reverts commit 4c2d3e37308cac98614dfafed79b7323423af8bc.
> >>
> >> The fix for CVE-2023-45237 causes ovmf firmware not support pxe boot
> >> any more and no boot item in OVMF menu such as
> >>
> >>      UEFI PXEv4 (MAC address)
> >>
> >> It has not been fixed by ovmf upstream and an issue has been created on
> >>
> >> https://github.com/tianocore/tianocore.github.io/issues/82
> >>
> >> Revert the fixes for now.
> >>
> >> Signed-off-by: Kai Kang <kai.k...@windriver.com>
> >> ---
> >>
> >> Please add option `--keep-cr` when invoke `git am`.
> >>
> >>   .../ovmf/ovmf/CVE-2023-45237-0001.patch       |   78 -
> >>   .../ovmf/ovmf/CVE-2023-45237-0002.patch       | 1288 -----------------
> >>   meta/recipes-core/ovmf/ovmf_git.bb            |    2 -
> >>   3 files changed, 1368 deletions(-)
> >>   delete mode 100644 meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0001.patch
> >>   delete mode 100644 meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0002.patch
> >>
> >> diff --git a/meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0001.patch 
> >> b/meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0001.patch
> >> deleted file mode 100644
> >> index d1dcb8dc44..0000000000
> >> --- a/meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0001.patch
> >> +++ /dev/null
> >> @@ -1,78 +0,0 @@
> >> -From cf07238e5fa4f8b1138ac1c9e80530b4d4e59f1c Mon Sep 17 00:00:00 2001
> >> -From: Pierre Gondois <pierre.gond...@arm.com>
> >> -Date: Fri, 11 Aug 2023 16:33:06 +0200
> >> -Subject: [PATCH] MdePkg/Rng: Add GUID to describe Arm Rndr Rng algorithms
> >> -
> >> -BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4441
> >> -
> >> -The EFI_RNG_PROTOCOL can rely on the RngLib. The RngLib has multiple
> >> -implementations, some of them are unsafe (e.g. BaseRngLibTimerLib).
> >> -To allow the RngDxe to detect when such implementation is used,
> >> -a GetRngGuid() function is added in a following patch.
> >> -
> >> -Prepare GetRngGuid() return values and add a gEfiRngAlgorithmArmRndr
> >> -to describe a Rng algorithm accessed through Arm's RNDR instruction.
> >> -[1] states that the implementation of this algorithm should be
> >> -compliant to NIST SP900-80. The compliance is not guaranteed.
> >> -
> >> -[1] Arm Architecture Reference Manual Armv8, for A-profile architecture
> >> -sK12.1 'Properties of the generated random number'
> >> -
> >> -Signed-off-by: Pierre Gondois <pierre.gond...@arm.com>
> >> -Reviewed-by: Sami Mujawar <sami.muja...@arm.com>
> >> -Reviewed-by: Liming Gao <gaolim...@byosoft.com.cn>
> >> -Acked-by: Ard Biesheuvel <a...@kernel.org>
> >> -Tested-by: Kun Qin <kun....@microsoft.com>
> >> -
> >> -CVE: CVE-2023-45237
> >> -
> >> -Upstream-Status: Backport 
> >> [https://github.com/tianocore/edk2/commit/cf07238e5fa4f8b1138ac1c9e80530b4d4e59f1c]
> >> -
> >> -Signed-off-by: Soumya Sambu <soumya.sa...@windriver.com>
> >> ----
> >> - MdePkg/Include/Protocol/Rng.h | 10 ++++++++++
> >> - MdePkg/MdePkg.dec             |  1 +
> >> - 2 files changed, 11 insertions(+)
> >> -
> >> -diff --git a/MdePkg/Include/Protocol/Rng.h b/MdePkg/Include/Protocol/Rng.h
> >> -index baf425587b..38bde53240 100644
> >> ---- a/MdePkg/Include/Protocol/Rng.h
> >> -+++ b/MdePkg/Include/Protocol/Rng.h
> >> -@@ -67,6 +67,15 @@ typedef EFI_GUID EFI_RNG_ALGORITHM;
> >> -   { \
> >> -     0xe43176d7, 0xb6e8, 0x4827, {0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 
> >> 0x85, 0x61 } \
> >> -   }
> >> -+///
> >> -+/// The Arm Architecture states the RNDR that the DRBG algorithm should 
> >> be compliant
> >> -+/// with NIST SP800-90A, while not mandating a particular algorithm, so 
> >> as to be
> >> -+/// inclusive of different geographies.
> >> -+///
> >> -+#define EFI_RNG_ALGORITHM_ARM_RNDR \
> >> -+  { \
> >> -+    0x43d2fde3, 0x9d4e, 0x4d79,  {0x02, 0x96, 0xa8, 0x9b, 0xca, 0x78, 
> >> 0x08, 0x41} \
> >> -+  }
> >> -
> >> - /**
> >> -   Returns information about the random number generation implementation.
> >> -@@ -146,5 +155,6 @@ extern EFI_GUID  gEfiRngAlgorithmSp80090Ctr256Guid;
> >> - extern EFI_GUID  gEfiRngAlgorithmX9313DesGuid;
> >> - extern EFI_GUID  gEfiRngAlgorithmX931AesGuid;
> >> - extern EFI_GUID  gEfiRngAlgorithmRaw;
> >> -+extern EFI_GUID  gEfiRngAlgorithmArmRndr;
> >> -
> >> - #endif
> >> -diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
> >> -index 59b405928b..a449dbc556 100644
> >> ---- a/MdePkg/MdePkg.dec
> >> -+++ b/MdePkg/MdePkg.dec
> >> -@@ -594,6 +594,7 @@
> >> -   gEfiRngAlgorithmX9313DesGuid       = { 0x63c4785a, 0xca34, 0x4012, 
> >> {0xa3, 0xc8, 0x0b, 0x6a, 0x32, 0x4f, 0x55, 0x46 }}
> >> -   gEfiRngAlgorithmX931AesGuid        = { 0xacd03321, 0x777e, 0x4d3d, 
> >> {0xb1, 0xc8, 0x20, 0xcf, 0xd8, 0x88, 0x20, 0xc9 }}
> >> -   gEfiRngAlgorithmRaw                = { 0xe43176d7, 0xb6e8, 0x4827, 
> >> {0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61 }}
> >> -+  gEfiRngAlgorithmArmRndr            = { 0x43d2fde3, 0x9d4e, 0x4d79, 
> >> {0x02, 0x96, 0xa8, 0x9b, 0xca, 0x78, 0x08, 0x41 }}
> >> -
> >> -   ## Include/Protocol/AdapterInformation.h
> >> -   gEfiAdapterInfoMediaStateGuid       = { 0xD7C74207, 0xA831, 0x4A26, 
> >> {0xB1, 0xF5, 0xD1, 0x93, 0x06, 0x5C, 0xE8, 0xB6 }}
> >> ---
> >> -2.40.0
> >> -
> >> diff --git a/meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0002.patch 
> >> b/meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0002.patch
> >> deleted file mode 100644
> >> index 722a6cd530..0000000000
> >> --- a/meta/recipes-core/ovmf/ovmf/CVE-2023-45237-0002.patch
> >> +++ /dev/null
> >> @@ -1,1288 +0,0 @@
> >> -From 4c4ceb2ceb80c42fd5545b2a4bd80321f07f4345 Mon Sep 17 00:00:00 2001
> >> -From: Doug Flick <dougfl...@microsoft.com>
> >> -Date: Wed, 8 May 2024 22:56:28 -0700
> >> -Subject: [PATCH] NetworkPkg: SECURITY PATCH CVE-2023-45237
> >> -
> >> -REF:https://bugzilla.tianocore.org/show_bug.cgi?id=4542
> >> -
> >> -Bug Overview:
> >> -PixieFail Bug #9
> >> -CVE-2023-45237
> >> -CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
> >> -CWE-338 Use of Cryptographically Weak Pseudo-Random Number Generator 
> >> (PRNG)
> >> -
> >> -Use of a Weak PseudoRandom Number Generator
> >> -
> >> -Change Overview:
> >> -
> >> -Updates all Instances of NET_RANDOM (NetRandomInitSeed ()) to either
> >> -
> >> ->
> >> -> EFI_STATUS
> >> -> EFIAPI
> >> -> PseudoRandomU32 (
> >> ->  OUT UINT32  *Output
> >> ->  );
> >> ->
> >> -
> >> -or (depending on the use case)
> >> -
> >> ->
> >> -> EFI_STATUS
> >> -> EFIAPI
> >> -> PseudoRandom (
> >> ->  OUT  VOID   *Output,
> >> ->  IN   UINTN  OutputLength
> >> ->  );
> >> ->
> >> -
> >> -This is because the use of
> >> -
> >> -Example:
> >> -
> >> -The following code snippet PseudoRandomU32 () function is used:
> >> -
> >> ->
> >> -> UINT32         Random;
> >> ->
> >> -> Status = PseudoRandomU32 (&Random);
> >> -> if (EFI_ERROR (Status)) {
> >> ->   DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n",
> >> -__func__, Status));
> >> ->   return Status;
> >> -> }
> >> ->
> >> -
> >> -This also introduces a new PCD to enable/disable the use of the
> >> -secure implementation of algorithms for PseudoRandom () and
> >> -instead depend on the default implementation. This may be required for
> >> -some platforms where the UEFI Spec defined algorithms are not available.
> >> -
> >> ->
> >> -> PcdEnforceSecureRngAlgorithms
> >> ->
> >> -
> >> -If the platform does not have any one of the UEFI defined
> >> -secure RNG algorithms then the driver will assert.
> >> -
> >> -Cc: Saloni Kasbekar <saloni.kasbe...@intel.com>
> >> -Cc: Zachary Clark-williams <zachary.clark-willi...@intel.com>
> >> -
> >> -Signed-off-by: Doug Flick [MSFT] <doug.e...@gmail.com>
> >> -Reviewed-by: Saloni Kasbekar <saloni.kasbe...@intel.com>
> >> -
> >> -CVE: CVE-2023-45237
> >> -
> >> -Upstream-Status: Backport 
> >> [https://github.com/tianocore/edk2/commit/4c4ceb2ceb80c42fd5545b2a4bd80321f07f4345]
> >> -
> >> -Signed-off-by: Soumya Sambu <soumya.sa...@windriver.com>
> >> ----
> >> - NetworkPkg/Dhcp4Dxe/Dhcp4Driver.c          |  10 +-
> >> - NetworkPkg/Dhcp6Dxe/Dhcp6Driver.c          |  11 +-
> >> - NetworkPkg/DnsDxe/DnsDhcp.c                |  10 +-
> >> - NetworkPkg/DnsDxe/DnsImpl.c                |  11 +-
> >> - NetworkPkg/HttpBootDxe/HttpBootDhcp6.c     |  10 +-
> >> - NetworkPkg/IScsiDxe/IScsiCHAP.c            |  19 ++-
> >> - NetworkPkg/IScsiDxe/IScsiMisc.c            |  14 +--
> >> - NetworkPkg/IScsiDxe/IScsiMisc.h            |   6 +-
> >> - NetworkPkg/Include/Library/NetLib.h        |  40 +++++--
> >> - NetworkPkg/Ip4Dxe/Ip4Driver.c              |  10 +-
> >> - NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c          |   9 +-
> >> - NetworkPkg/Ip6Dxe/Ip6Driver.c              |  17 ++-
> >> - NetworkPkg/Ip6Dxe/Ip6If.c                  |  12 +-
> >> - NetworkPkg/Ip6Dxe/Ip6Mld.c                 |  12 +-
> >> - NetworkPkg/Ip6Dxe/Ip6Nd.c                  |  33 +++++-
> >> - NetworkPkg/Ip6Dxe/Ip6Nd.h                  |   8 +-
> >> - NetworkPkg/Library/DxeNetLib/DxeNetLib.c   | 130 ++++++++++++++++++---
> >> - NetworkPkg/Library/DxeNetLib/DxeNetLib.inf |  14 ++-
> >> - NetworkPkg/NetworkPkg.dec                  |   7 ++
> >> - NetworkPkg/SecurityFixes.yaml              |  39 +++++++
> >> - NetworkPkg/TcpDxe/TcpDriver.c              |  15 ++-
> >> - NetworkPkg/TcpDxe/TcpDxe.inf               |   3 +
> >> - NetworkPkg/Udp4Dxe/Udp4Driver.c            |  10 +-
> >> - NetworkPkg/Udp6Dxe/Udp6Driver.c            |  11 +-
> >> - NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c       |   9 +-
> >> - NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c       |  11 +-
> >> - NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c      |  12 +-
> >> - 27 files changed, 410 insertions(+), 83 deletions(-)
> >> -
> >> -diff --git a/NetworkPkg/Dhcp4Dxe/Dhcp4Driver.c 
> >> b/NetworkPkg/Dhcp4Dxe/Dhcp4Driver.c
> >> -index 8c37e93be3..892caee368 100644
> >> ---- a/NetworkPkg/Dhcp4Dxe/Dhcp4Driver.c
> >> -+++ b/NetworkPkg/Dhcp4Dxe/Dhcp4Driver.c
> >> -@@ -1,6 +1,7 @@
> >> - /** @file
> >> -
> >> - Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> >> -+Copyright (c) Microsoft Corporation
> >> - SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -189,6 +190,13 @@ Dhcp4CreateService (
> >> - {
> >> -   DHCP_SERVICE  *DhcpSb;
> >> -   EFI_STATUS    Status;
> >> -+  UINT32        Random;
> >> -+
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -
> >> -   *Service = NULL;
> >> -   DhcpSb   = AllocateZeroPool (sizeof (DHCP_SERVICE));
> >> -@@ -203,7 +211,7 @@ Dhcp4CreateService (
> >> -   DhcpSb->Image        = ImageHandle;
> >> -   InitializeListHead (&DhcpSb->Children);
> >> -   DhcpSb->DhcpState = Dhcp4Stopped;
> >> --  DhcpSb->Xid       = NET_RANDOM (NetRandomInitSeed ());
> >> -+  DhcpSb->Xid       = Random;
> >> -   CopyMem (
> >> -     &DhcpSb->ServiceBinding,
> >> -     &mDhcp4ServiceBindingTemplate,
> >> -diff --git a/NetworkPkg/Dhcp6Dxe/Dhcp6Driver.c 
> >> b/NetworkPkg/Dhcp6Dxe/Dhcp6Driver.c
> >> -index b591a4605b..e7f2787a98 100644
> >> ---- a/NetworkPkg/Dhcp6Dxe/Dhcp6Driver.c
> >> -+++ b/NetworkPkg/Dhcp6Dxe/Dhcp6Driver.c
> >> -@@ -3,7 +3,7 @@
> >> -   implementation for Dhcp6 Driver.
> >> -
> >> -   Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> >> --
> >> -+  Copyright (c) Microsoft Corporation
> >> -   SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -123,6 +123,13 @@ Dhcp6CreateService (
> >> - {
> >> -   DHCP6_SERVICE  *Dhcp6Srv;
> >> -   EFI_STATUS     Status;
> >> -+  UINT32         Random;
> >> -+
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -
> >> -   *Service = NULL;
> >> -   Dhcp6Srv = AllocateZeroPool (sizeof (DHCP6_SERVICE));
> >> -@@ -147,7 +154,7 @@ Dhcp6CreateService (
> >> -   Dhcp6Srv->Signature  = DHCP6_SERVICE_SIGNATURE;
> >> -   Dhcp6Srv->Controller = Controller;
> >> -   Dhcp6Srv->Image      = ImageHandle;
> >> --  Dhcp6Srv->Xid        = (0xffffff & NET_RANDOM (NetRandomInitSeed ()));
> >> -+  Dhcp6Srv->Xid        = (0xffffff & Random);
> >> -
> >> -   CopyMem (
> >> -     &Dhcp6Srv->ServiceBinding,
> >> -diff --git a/NetworkPkg/DnsDxe/DnsDhcp.c b/NetworkPkg/DnsDxe/DnsDhcp.c
> >> -index 933565a32d..9eb3c1d2d8 100644
> >> ---- a/NetworkPkg/DnsDxe/DnsDhcp.c
> >> -+++ b/NetworkPkg/DnsDxe/DnsDhcp.c
> >> -@@ -2,6 +2,7 @@
> >> - Functions implementation related with DHCPv4/v6 for DNS driver.
> >> -
> >> - Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> >> -+Copyright (c) Microsoft Corporation
> >> - SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -277,6 +278,7 @@ GetDns4ServerFromDhcp4 (
> >> -   EFI_DHCP4_TRANSMIT_RECEIVE_TOKEN  Token;
> >> -   BOOLEAN                           IsDone;
> >> -   UINTN                             Index;
> >> -+  UINT32                            Random;
> >> -
> >> -   Image      = Instance->Service->ImageHandle;
> >> -   Controller = Instance->Service->ControllerHandle;
> >> -@@ -292,6 +294,12 @@ GetDns4ServerFromDhcp4 (
> >> -   Data          = NULL;
> >> -   InterfaceInfo = NULL;
> >> -
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -+
> >> -   ZeroMem ((UINT8 *)ParaList, sizeof (ParaList));
> >> -
> >> -   ZeroMem (&MnpConfigData, sizeof (EFI_MANAGED_NETWORK_CONFIG_DATA));
> >> -@@ -467,7 +475,7 @@ GetDns4ServerFromDhcp4 (
> >> -
> >> -   Status = Dhcp4->Build (Dhcp4, &SeedPacket, 0, NULL, 2, ParaList, 
> >> &Token.Packet);
> >> -
> >> --  Token.Packet->Dhcp4.Header.Xid = HTONL (NET_RANDOM (NetRandomInitSeed 
> >> ()));
> >> -+  Token.Packet->Dhcp4.Header.Xid = Random;
> >> -
> >> -   Token.Packet->Dhcp4.Header.Reserved = HTONS ((UINT16)0x8000);
> >> -
> >> -diff --git a/NetworkPkg/DnsDxe/DnsImpl.c b/NetworkPkg/DnsDxe/DnsImpl.c
> >> -index d311812800..c2629bb8df 100644
> >> ---- a/NetworkPkg/DnsDxe/DnsImpl.c
> >> -+++ b/NetworkPkg/DnsDxe/DnsImpl.c
> >> -@@ -2,6 +2,7 @@
> >> - DnsDxe support functions implementation.
> >> -
> >> - Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> >> -+Copyright (c) Microsoft Corporation
> >> - SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -1963,6 +1964,14 @@ ConstructDNSQuery (
> >> -   NET_FRAGMENT       Frag;
> >> -   DNS_HEADER         *DnsHeader;
> >> -   DNS_QUERY_SECTION  *DnsQuery;
> >> -+  EFI_STATUS         Status;
> >> -+  UINT32             Random;
> >> -+
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -
> >> -   //
> >> -   // Messages carried by UDP are restricted to 512 bytes (not counting 
> >> the IP
> >> -@@ -1977,7 +1986,7 @@ ConstructDNSQuery (
> >> -   // Fill header
> >> -   //
> >> -   DnsHeader                    = (DNS_HEADER *)Frag.Bulk;
> >> --  DnsHeader->Identification    = (UINT16)NET_RANDOM (NetRandomInitSeed 
> >> ());
> >> -+  DnsHeader->Identification    = (UINT16)Random;
> >> -   DnsHeader->Flags.Uint16      = 0x0000;
> >> -   DnsHeader->Flags.Bits.RD     = 1;
> >> -   DnsHeader->Flags.Bits.OpCode = DNS_FLAGS_OPCODE_STANDARD;
> >> -diff --git a/NetworkPkg/HttpBootDxe/HttpBootDhcp6.c 
> >> b/NetworkPkg/HttpBootDxe/HttpBootDhcp6.c
> >> -index b22cef4ff5..f964515b0f 100644
> >> ---- a/NetworkPkg/HttpBootDxe/HttpBootDhcp6.c
> >> -+++ b/NetworkPkg/HttpBootDxe/HttpBootDhcp6.c
> >> -@@ -2,6 +2,7 @@
> >> -   Functions implementation related with DHCPv6 for HTTP boot driver.
> >> -
> >> - Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> >> -+Copyright (c) Microsoft Corporation
> >> - SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -951,6 +952,7 @@ HttpBootDhcp6Sarr (
> >> -   UINT32                    OptCount;
> >> -   UINT8                     Buffer[HTTP_BOOT_DHCP6_OPTION_MAX_SIZE];
> >> -   EFI_STATUS                Status;
> >> -+  UINT32                    Random;
> >> -
> >> -   Dhcp6 = Private->Dhcp6;
> >> -   ASSERT (Dhcp6 != NULL);
> >> -@@ -961,6 +963,12 @@ HttpBootDhcp6Sarr (
> >> -   OptCount = HttpBootBuildDhcp6Options (Private, OptList, Buffer);
> >> -   ASSERT (OptCount > 0);
> >> -
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -+
> >> -   Retransmit = AllocateZeroPool (sizeof (EFI_DHCP6_RETRANSMISSION));
> >> -   if (Retransmit == NULL) {
> >> -     return EFI_OUT_OF_RESOURCES;
> >> -@@ -976,7 +984,7 @@ HttpBootDhcp6Sarr (
> >> -   Config.IaInfoEvent           = NULL;
> >> -   Config.RapidCommit           = FALSE;
> >> -   Config.ReconfigureAccept     = FALSE;
> >> --  Config.IaDescriptor.IaId     = NET_RANDOM (NetRandomInitSeed ());
> >> -+  Config.IaDescriptor.IaId     = Random;
> >> -   Config.IaDescriptor.Type     = EFI_DHCP6_IA_TYPE_NA;
> >> -   Config.SolicitRetransmission = Retransmit;
> >> -   Retransmit->Irt              = 4;
> >> -diff --git a/NetworkPkg/IScsiDxe/IScsiCHAP.c 
> >> b/NetworkPkg/IScsiDxe/IScsiCHAP.c
> >> -index b507f11cd4..bebb1ac29b 100644
> >> ---- a/NetworkPkg/IScsiDxe/IScsiCHAP.c
> >> -+++ b/NetworkPkg/IScsiDxe/IScsiCHAP.c
> >> -@@ -3,6 +3,7 @@
> >> -   Configuration.
> >> -
> >> - Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
> >> -+Copyright (c) Microsoft Corporation
> >> - SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -576,16 +577,24 @@ IScsiCHAPToSendReq (
> >> -         //
> >> -         // CHAP_I=<I>
> >> -         //
> >> --        IScsiGenRandom ((UINT8 *)&AuthData->OutIdentifier, 1);
> >> -+        Status = IScsiGenRandom ((UINT8 *)&AuthData->OutIdentifier, 1);
> >> -+        if (EFI_ERROR (Status)) {
> >> -+          break;
> >> -+        }
> >> -+
> >> -         AsciiSPrint (ValueStr, sizeof (ValueStr), "%d", 
> >> AuthData->OutIdentifier);
> >> -         IScsiAddKeyValuePair (Pdu, ISCSI_KEY_CHAP_IDENTIFIER, ValueStr);
> >> -         //
> >> -         // CHAP_C=<C>
> >> -         //
> >> --        IScsiGenRandom (
> >> --          (UINT8 *)AuthData->OutChallenge,
> >> --          AuthData->Hash->DigestSize
> >> --          );
> >> -+        Status = IScsiGenRandom (
> >> -+                   (UINT8 *)AuthData->OutChallenge,
> >> -+                   AuthData->Hash->DigestSize
> >> -+                   );
> >> -+        if (EFI_ERROR (Status)) {
> >> -+          break;
> >> -+        }
> >> -+
> >> -         BinToHexStatus = IScsiBinToHex (
> >> -                            (UINT8 *)AuthData->OutChallenge,
> >> -                            AuthData->Hash->DigestSize,
> >> -diff --git a/NetworkPkg/IScsiDxe/IScsiMisc.c 
> >> b/NetworkPkg/IScsiDxe/IScsiMisc.c
> >> -index b3ea90158f..cd77f1a13e 100644
> >> ---- a/NetworkPkg/IScsiDxe/IScsiMisc.c
> >> -+++ b/NetworkPkg/IScsiDxe/IScsiMisc.c
> >> -@@ -2,6 +2,7 @@
> >> -   Miscellaneous routines for iSCSI driver.
> >> -
> >> - Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
> >> -+Copyright (c) Microsoft Corporation
> >> - SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -474,20 +475,17 @@ IScsiNetNtoi (
> >> -   @param[in, out]  Rand       The buffer to contain random numbers.
> >> -   @param[in]       RandLength The length of the Rand buffer.
> >> -
> >> -+  @retval EFI_SUCCESS on success
> >> -+  @retval others      on error
> >> -+
> >> - **/
> >> --VOID
> >> -+EFI_STATUS
> >> - IScsiGenRandom (
> >> -   IN OUT UINT8  *Rand,
> >> -   IN     UINTN  RandLength
> >> -   )
> >> - {
> >> --  UINT32  Random;
> >> --
> >> --  while (RandLength > 0) {
> >> --    Random  = NET_RANDOM (NetRandomInitSeed ());
> >> --    *Rand++ = (UINT8)(Random);
> >> --    RandLength--;
> >> --  }
> >> -+  return PseudoRandom (Rand, RandLength);
> >> - }
> >> -
> >> - /**
> >> -diff --git a/NetworkPkg/IScsiDxe/IScsiMisc.h 
> >> b/NetworkPkg/IScsiDxe/IScsiMisc.h
> >> -index a951eee70e..91b2cd2261 100644
> >> ---- a/NetworkPkg/IScsiDxe/IScsiMisc.h
> >> -+++ b/NetworkPkg/IScsiDxe/IScsiMisc.h
> >> -@@ -2,6 +2,7 @@
> >> -   Miscellaneous definitions for iSCSI driver.
> >> -
> >> - Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
> >> -+Copyright (c) Microsoft Corporation
> >> - SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -202,8 +203,11 @@ IScsiNetNtoi (
> >> -   @param[in, out]  Rand       The buffer to contain random numbers.
> >> -   @param[in]       RandLength The length of the Rand buffer.
> >> -
> >> -+  @retval EFI_SUCCESS on success
> >> -+  @retval others      on error
> >> -+
> >> - **/
> >> --VOID
> >> -+EFI_STATUS
> >> - IScsiGenRandom (
> >> -   IN OUT UINT8  *Rand,
> >> -   IN     UINTN  RandLength
> >> -diff --git a/NetworkPkg/Include/Library/NetLib.h 
> >> b/NetworkPkg/Include/Library/NetLib.h
> >> -index 8c0e62b388..e8108b79db 100644
> >> ---- a/NetworkPkg/Include/Library/NetLib.h
> >> -+++ b/NetworkPkg/Include/Library/NetLib.h
> >> -@@ -3,6 +3,7 @@
> >> -   It provides basic functions for the UEFI network stack.
> >> -
> >> - Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>
> >> -+Copyright (c) Microsoft Corporation
> >> - SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -539,8 +540,6 @@ extern EFI_IPv4_ADDRESS  mZeroIp4Addr;
> >> - #define TICKS_PER_MS      10000U
> >> - #define TICKS_PER_SECOND  10000000U
> >> -
> >> --#define NET_RANDOM(Seed)  ((UINT32) ((UINT32) (Seed) * 1103515245UL + 
> >> 12345) % 4294967295UL)
> >> --
> >> - /**
> >> -   Extract a UINT32 from a byte stream.
> >> -
> >> -@@ -580,19 +579,40 @@ NetPutUint32 (
> >> -   );
> >> -
> >> - /**
> >> --  Initialize a random seed using current time and monotonic count.
> >> -+  Generate a Random output data given a length.
> >> -
> >> --  Get current time and monotonic count first. Then initialize a random 
> >> seed
> >> --  based on some basic mathematics operation on the hour, day, minute, 
> >> second,
> >> --  nanosecond and year of the current time and the monotonic count value.
> >> -+  @param[out] Output - The buffer to store the generated random data.
> >> -+  @param[in] OutputLength - The length of the output buffer.
> >> -
> >> --  @return The random seed initialized with current time.
> >> -+  @retval EFI_SUCCESS           On Success
> >> -+  @retval EFI_INVALID_PARAMETER Pointer is null or size is zero
> >> -+  @retval EFI_NOT_FOUND         RNG protocol not found
> >> -+  @retval Others                Error from RngProtocol->GetRNG()
> >> -
> >> -+  @return Status code
> >> - **/
> >> --UINT32
> >> -+EFI_STATUS
> >> - EFIAPI
> >> --NetRandomInitSeed (
> >> --  VOID
> >> -+PseudoRandom (
> >> -+  OUT  VOID   *Output,
> >> -+  IN   UINTN  OutputLength
> >> -+  );
> >> -+
> >> -+/**
> >> -+  Generate a 32-bit pseudo-random number.
> >> -+
> >> -+  @param[out] Output - The buffer to store the generated random number.
> >> -+
> >> -+  @retval EFI_SUCCESS           On Success
> >> -+  @retval EFI_NOT_FOUND         RNG protocol not found
> >> -+  @retval Others                Error from RngProtocol->GetRNG()
> >> -+
> >> -+  @return Status code
> >> -+**/
> >> -+EFI_STATUS
> >> -+EFIAPI
> >> -+PseudoRandomU32 (
> >> -+  OUT  UINT32  *Output
> >> -   );
> >> -
> >> - #define NET_LIST_USER_STRUCT(Entry, Type, Field)        \
> >> -diff --git a/NetworkPkg/Ip4Dxe/Ip4Driver.c b/NetworkPkg/Ip4Dxe/Ip4Driver.c
> >> -index ec483ff01f..683423f38d 100644
> >> ---- a/NetworkPkg/Ip4Dxe/Ip4Driver.c
> >> -+++ b/NetworkPkg/Ip4Dxe/Ip4Driver.c
> >> -@@ -2,6 +2,7 @@
> >> -   The driver binding and service binding protocol for IP4 driver.
> >> -
> >> - Copyright (c) 2005 - 2019, Intel Corporation. All rights reserved.<BR>
> >> -+Copyright (c) Microsoft Corporation
> >> - (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
> >> -
> >> - SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -@@ -549,11 +550,18 @@ Ip4DriverBindingStart (
> >> -   EFI_IP4_CONFIG2_PROTOCOL  *Ip4Cfg2;
> >> -   UINTN                     Index;
> >> -   IP4_CONFIG2_DATA_ITEM     *DataItem;
> >> -+  UINT32                    Random;
> >> -
> >> -   IpSb     = NULL;
> >> -   Ip4Cfg2  = NULL;
> >> -   DataItem = NULL;
> >> -
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -+
> >> -   //
> >> -   // Test for the Ip4 service binding protocol
> >> -   //
> >> -@@ -653,7 +661,7 @@ Ip4DriverBindingStart (
> >> -   //
> >> -   // Initialize the IP4 ID
> >> -   //
> >> --  mIp4Id = (UINT16)NET_RANDOM (NetRandomInitSeed ());
> >> -+  mIp4Id = (UINT16)Random;
> >> -
> >> -   return Status;
> >> -
> >> -diff --git a/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c 
> >> b/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c
> >> -index 70e232ce6c..4c1354d26c 100644
> >> ---- a/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c
> >> -+++ b/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c
> >> -@@ -2276,6 +2276,13 @@ Ip6ConfigInitInstance (
> >> -   UINTN                 Index;
> >> -   UINT16                IfIndex;
> >> -   IP6_CONFIG_DATA_ITEM  *DataItem;
> >> -+  UINT32                Random;
> >> -+
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -
> >> -   IpSb = IP6_SERVICE_FROM_IP6_CONFIG_INSTANCE (Instance);
> >> -
> >> -@@ -2381,7 +2388,7 @@ Ip6ConfigInitInstance (
> >> -     // The NV variable is not set, so generate a random IAID, and write 
> >> down the
> >> -     // fresh new configuration as the NV variable now.
> >> -     //
> >> --    Instance->IaId = NET_RANDOM (NetRandomInitSeed ());
> >> -+    Instance->IaId = Random;
> >> -
> >> -     for (Index = 0; Index < IpSb->SnpMode.HwAddressSize; Index++) {
> >> -       Instance->IaId |= (IpSb->SnpMode.CurrentAddress.Addr[Index] << 
> >> ((Index << 3) & 31));
> >> -diff --git a/NetworkPkg/Ip6Dxe/Ip6Driver.c b/NetworkPkg/Ip6Dxe/Ip6Driver.c
> >> -index b483a7d136..cbe011dad4 100644
> >> ---- a/NetworkPkg/Ip6Dxe/Ip6Driver.c
> >> -+++ b/NetworkPkg/Ip6Dxe/Ip6Driver.c
> >> -@@ -3,7 +3,7 @@
> >> -
> >> -   Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>
> >> -   (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
> >> --
> >> -+  Copyright (c) Microsoft Corporation
> >> -   SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -316,7 +316,11 @@ Ip6CreateService (
> >> -   IpSb->CurHopLimit       = IP6_HOP_LIMIT;
> >> -   IpSb->LinkMTU           = IP6_MIN_LINK_MTU;
> >> -   IpSb->BaseReachableTime = IP6_REACHABLE_TIME;
> >> --  Ip6UpdateReachableTime (IpSb);
> >> -+  Status                  = Ip6UpdateReachableTime (IpSb);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    goto ON_ERROR;
> >> -+  }
> >> -+
> >> -   //
> >> -   // RFC4861 RETRANS_TIMER: 1,000 milliseconds
> >> -   //
> >> -@@ -516,11 +520,18 @@ Ip6DriverBindingStart (
> >> -   EFI_STATUS               Status;
> >> -   EFI_IP6_CONFIG_PROTOCOL  *Ip6Cfg;
> >> -   IP6_CONFIG_DATA_ITEM     *DataItem;
> >> -+  UINT32                   Random;
> >> -
> >> -   IpSb     = NULL;
> >> -   Ip6Cfg   = NULL;
> >> -   DataItem = NULL;
> >> -
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -+
> >> -   //
> >> -   // Test for the Ip6 service binding protocol
> >> -   //
> >> -@@ -656,7 +667,7 @@ Ip6DriverBindingStart (
> >> -   //
> >> -   // Initialize the IP6 ID
> >> -   //
> >> --  mIp6Id = NET_RANDOM (NetRandomInitSeed ());
> >> -+  mIp6Id = Random;
> >> -
> >> -   return EFI_SUCCESS;
> >> -
> >> -diff --git a/NetworkPkg/Ip6Dxe/Ip6If.c b/NetworkPkg/Ip6Dxe/Ip6If.c
> >> -index 4629c05f25..f3d11c4d21 100644
> >> ---- a/NetworkPkg/Ip6Dxe/Ip6If.c
> >> -+++ b/NetworkPkg/Ip6Dxe/Ip6If.c
> >> -@@ -2,7 +2,7 @@
> >> -   Implement IP6 pseudo interface.
> >> -
> >> -   Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> >> --
> >> -+  Copyright (c) Microsoft Corporation
> >> -   SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -89,6 +89,14 @@ Ip6SetAddress (
> >> -   IP6_PREFIX_LIST_ENTRY  *PrefixEntry;
> >> -   UINT64                 Delay;
> >> -   IP6_DELAY_JOIN_LIST    *DelayNode;
> >> -+  EFI_STATUS             Status;
> >> -+  UINT32                 Random;
> >> -+
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -
> >> -   NET_CHECK_SIGNATURE (Interface, IP6_INTERFACE_SIGNATURE);
> >> -
> >> -@@ -164,7 +172,7 @@ Ip6SetAddress (
> >> -   // Thus queue the address to be processed in Duplicate Address 
> >> Detection module
> >> -   // after the delay time (in milliseconds).
> >> -   //
> >> --  Delay = (UINT64)NET_RANDOM (NetRandomInitSeed ());
> >> -+  Delay = (UINT64)Random;
> >> -   Delay = MultU64x32 (Delay, IP6_ONE_SECOND_IN_MS);
> >> -   Delay = RShiftU64 (Delay, 32);
> >> -
> >> -diff --git a/NetworkPkg/Ip6Dxe/Ip6Mld.c b/NetworkPkg/Ip6Dxe/Ip6Mld.c
> >> -index e6b2b653e2..498a118543 100644
> >> ---- a/NetworkPkg/Ip6Dxe/Ip6Mld.c
> >> -+++ b/NetworkPkg/Ip6Dxe/Ip6Mld.c
> >> -@@ -696,7 +696,15 @@ Ip6UpdateDelayTimer (
> >> -   IN OUT IP6_MLD_GROUP  *Group
> >> -   )
> >> - {
> >> --  UINT32  Delay;
> >> -+  UINT32      Delay;
> >> -+  EFI_STATUS  Status;
> >> -+  UINT32      Random;
> >> -+
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -
> >> -   //
> >> -   // If the Query packet specifies a Maximum Response Delay of zero, 
> >> perform timer
> >> -@@ -715,7 +723,7 @@ Ip6UpdateDelayTimer (
> >> -   // is less than the remaining value of the running timer.
> >> -   //
> >> -   if ((Group->DelayTimer == 0) || (Delay < Group->DelayTimer)) {
> >> --    Group->DelayTimer = Delay / 4294967295UL * NET_RANDOM 
> >> (NetRandomInitSeed ());
> >> -+    Group->DelayTimer = Delay / 4294967295UL * Random;
> >> -   }
> >> -
> >> -   return EFI_SUCCESS;
> >> -diff --git a/NetworkPkg/Ip6Dxe/Ip6Nd.c b/NetworkPkg/Ip6Dxe/Ip6Nd.c
> >> -index c10c7017f8..72aa45c10f 100644
> >> ---- a/NetworkPkg/Ip6Dxe/Ip6Nd.c
> >> -+++ b/NetworkPkg/Ip6Dxe/Ip6Nd.c
> >> -@@ -2,7 +2,7 @@
> >> -   Implementation of Neighbor Discovery support routines.
> >> -
> >> -   Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> >> --
> >> -+  Copyright (c) Microsoft Corporation
> >> -   SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -16,17 +16,28 @@ EFI_MAC_ADDRESS  mZeroMacAddress;
> >> -
> >> -   @param[in, out] IpSb     Points to the IP6_SERVICE.
> >> -
> >> -+  @retval EFI_SUCCESS           ReachableTime Updated
> >> -+  @retval others                Failed to update ReachableTime
> >> - **/
> >> --VOID
> >> -+EFI_STATUS
> >> - Ip6UpdateReachableTime (
> >> -   IN OUT IP6_SERVICE  *IpSb
> >> -   )
> >> - {
> >> --  UINT32  Random;
> >> -+  UINT32      Random;
> >> -+  EFI_STATUS  Status;
> >> -
> >> --  Random              = (NetRandomInitSeed () / 4294967295UL) * 
> >> IP6_RANDOM_FACTOR_SCALE;
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -+
> >> -+  Random              = (Random / 4294967295UL) * 
> >> IP6_RANDOM_FACTOR_SCALE;
> >> -   Random              = Random + IP6_MIN_RANDOM_FACTOR_SCALED;
> >> -   IpSb->ReachableTime = (IpSb->BaseReachableTime * Random) / 
> >> IP6_RANDOM_FACTOR_SCALE;
> >> -+
> >> -+  return EFI_SUCCESS;
> >> - }
> >> -
> >> - /**
> >> -@@ -972,10 +983,17 @@ Ip6InitDADProcess (
> >> -   IP6_SERVICE                               *IpSb;
> >> -   EFI_STATUS                                Status;
> >> -   UINT32                                    MaxDelayTick;
> >> -+  UINT32                                    Random;
> >> -
> >> -   NET_CHECK_SIGNATURE (IpIf, IP6_INTERFACE_SIGNATURE);
> >> -   ASSERT (AddressInfo != NULL);
> >> -
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -+
> >> -   //
> >> -   // Do nothing if we have already started DAD on the address.
> >> -   //
> >> -@@ -1014,7 +1032,7 @@ Ip6InitDADProcess (
> >> -   Entry->Transmit    = 0;
> >> -   Entry->Receive     = 0;
> >> -   MaxDelayTick       = IP6_MAX_RTR_SOLICITATION_DELAY / 
> >> IP6_TIMER_INTERVAL_IN_MS;
> >> --  Entry->RetransTick = (MaxDelayTick * ((NET_RANDOM (NetRandomInitSeed 
> >> ()) % 5) + 1)) / 5;
> >> -+  Entry->RetransTick = (MaxDelayTick * ((Random % 5) + 1)) / 5;
> >> -   Entry->AddressInfo = AddressInfo;
> >> -   Entry->Callback    = Callback;
> >> -   Entry->Context     = Context;
> >> -@@ -2078,7 +2096,10 @@ Ip6ProcessRouterAdvertise (
> >> -     // in BaseReachableTime and recompute a ReachableTime.
> >> -     //
> >> -     IpSb->BaseReachableTime = ReachableTime;
> >> --    Ip6UpdateReachableTime (IpSb);
> >> -+    Status                  = Ip6UpdateReachableTime (IpSb);
> >> -+    if (EFI_ERROR (Status)) {
> >> -+      goto Exit;
> >> -+    }
> >> -   }
> >> -
> >> -   if (RetransTimer != 0) {
> >> -diff --git a/NetworkPkg/Ip6Dxe/Ip6Nd.h b/NetworkPkg/Ip6Dxe/Ip6Nd.h
> >> -index bf64e9114e..5795e23c7d 100644
> >> ---- a/NetworkPkg/Ip6Dxe/Ip6Nd.h
> >> -+++ b/NetworkPkg/Ip6Dxe/Ip6Nd.h
> >> -@@ -2,7 +2,7 @@
> >> -   Definition of Neighbor Discovery support routines.
> >> -
> >> -   Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
> >> --
> >> -+  Copyright (c) Microsoft Corporation
> >> -   SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -780,10 +780,10 @@ Ip6OnArpResolved (
> >> - /**
> >> -   Update the ReachableTime in IP6 service binding instance data, in 
> >> milliseconds.
> >> -
> >> --  @param[in, out] IpSb     Points to the IP6_SERVICE.
> >> --
> >> -+  @retval EFI_SUCCESS           ReachableTime Updated
> >> -+  @retval others                Failed to update ReachableTime
> >> - **/
> >> --VOID
> >> -+EFI_STATUS
> >> - Ip6UpdateReachableTime (
> >> -   IN OUT IP6_SERVICE  *IpSb
> >> -   );
> >> -diff --git a/NetworkPkg/Library/DxeNetLib/DxeNetLib.c 
> >> b/NetworkPkg/Library/DxeNetLib/DxeNetLib.c
> >> -index fd4a9e15a8..01c13c08d2 100644
> >> ---- a/NetworkPkg/Library/DxeNetLib/DxeNetLib.c
> >> -+++ b/NetworkPkg/Library/DxeNetLib/DxeNetLib.c
> >> -@@ -3,6 +3,7 @@
> >> -
> >> - Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>
> >> - (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
> >> -+Copyright (c) Microsoft Corporation
> >> - SPDX-License-Identifier: BSD-2-Clause-Patent
> >> - **/
> >> -
> >> -@@ -31,6 +32,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
> >> - #include <Library/DevicePathLib.h>
> >> - #include <Library/PrintLib.h>
> >> - #include <Library/UefiLib.h>
> >> -+#include <Protocol/Rng.h>
> >> -
> >> - #define NIC_ITEM_CONFIG_SIZE  (sizeof (NIC_IP4_CONFIG_INFO) + sizeof 
> >> (EFI_IP4_ROUTE_TABLE) * MAX_IP4_CONFIG_IN_VARIABLE)
> >> - #define DEFAULT_ZERO_START    ((UINTN) ~0)
> >> -@@ -127,6 +129,25 @@ GLOBAL_REMOVE_IF_UNREFERENCED VLAN_DEVICE_PATH  
> >> mNetVlanDevicePathTemplate = {
> >> -   0
> >> - };
> >> -
> >> -+//
> >> -+// These represent UEFI SPEC defined algorithms that should be supported 
> >> by
> >> -+// the RNG protocol and are generally considered secure.
> >> -+//
> >> -+// The order of the algorithms in this array is important. This order is 
> >> the order
> >> -+// in which the algorithms will be tried by the RNG protocol.
> >> -+// If your platform needs to use a specific algorithm for the random 
> >> number generator,
> >> -+// then you should place that algorithm first in the array.
> >> -+//
> >> -+GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID  *mSecureHashAlgorithms[] = {
> >> -+  &gEfiRngAlgorithmSp80090Ctr256Guid,  // SP800-90A DRBG CTR using 
> >> AES-256
> >> -+  &gEfiRngAlgorithmSp80090Hmac256Guid, // SP800-90A DRBG HMAC using 
> >> SHA-256
> >> -+  &gEfiRngAlgorithmSp80090Hash256Guid, // SP800-90A DRBG Hash using 
> >> SHA-256
> >> -+  &gEfiRngAlgorithmArmRndr,            // unspecified SP800-90A DRBG via 
> >> ARM RNDR register
> >> -+  &gEfiRngAlgorithmRaw,                // Raw data from NRBG (or TRNG)
> >> -+};
> >> -+
> >> -+#define SECURE_HASH_ALGORITHMS_SIZE  (sizeof (mSecureHashAlgorithms) / 
> >> sizeof (EFI_GUID *))
> >> -+
> >> - /**
> >> -   Locate the handles that support SNP, then open one of them
> >> -   to send the syslog packets. The caller isn't required to close
> >> -@@ -884,34 +905,107 @@ Ip6Swap128 (
> >> - }
> >> -
> >> - /**
> >> --  Initialize a random seed using current time and monotonic count.
> >> -+  Generate a Random output data given a length.
> >> -
> >> --  Get current time and monotonic count first. Then initialize a random 
> >> seed
> >> --  based on some basic mathematics operation on the hour, day, minute, 
> >> second,
> >> --  nanosecond and year of the current time and the monotonic count value.
> >> -+  @param[out] Output - The buffer to store the generated random data.
> >> -+  @param[in] OutputLength - The length of the output buffer.
> >> -
> >> --  @return The random seed initialized with current time.
> >> -+  @retval EFI_SUCCESS           On Success
> >> -+  @retval EFI_INVALID_PARAMETER Pointer is null or size is zero
> >> -+  @retval EFI_NOT_FOUND         RNG protocol not found
> >> -+  @retval Others                Error from RngProtocol->GetRNG()
> >> -
> >> -+  @return Status code
> >> - **/
> >> --UINT32
> >> -+EFI_STATUS
> >> - EFIAPI
> >> --NetRandomInitSeed (
> >> --  VOID
> >> -+PseudoRandom (
> >> -+  OUT  VOID   *Output,
> >> -+  IN   UINTN  OutputLength
> >> -   )
> >> - {
> >> --  EFI_TIME  Time;
> >> --  UINT32    Seed;
> >> --  UINT64    MonotonicCount;
> >> -+  EFI_RNG_PROTOCOL  *RngProtocol;
> >> -+  EFI_STATUS        Status;
> >> -+  UINTN             AlgorithmIndex;
> >> -+
> >> -+  if ((Output == NULL) || (OutputLength == 0)) {
> >> -+    return EFI_INVALID_PARAMETER;
> >> -+  }
> >> -+
> >> -+  Status = gBS->LocateProtocol (&gEfiRngProtocolGuid, NULL, (VOID 
> >> **)&RngProtocol);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "Failed to locate EFI_RNG_PROTOCOL: %r\n", 
> >> Status));
> >> -+    ASSERT_EFI_ERROR (Status);
> >> -+    return Status;
> >> -+  }
> >> -+
> >> -+  if (PcdGetBool (PcdEnforceSecureRngAlgorithms)) {
> >> -+    for (AlgorithmIndex = 0; AlgorithmIndex < 
> >> SECURE_HASH_ALGORITHMS_SIZE; AlgorithmIndex++) {
> >> -+      Status = RngProtocol->GetRNG (RngProtocol, 
> >> mSecureHashAlgorithms[AlgorithmIndex], OutputLength, (UINT8 *)Output);
> >> -+      if (!EFI_ERROR (Status)) {
> >> -+        //
> >> -+        // Secure Algorithm was supported on this platform
> >> -+        //
> >> -+        return EFI_SUCCESS;
> >> -+      } else if (Status == EFI_UNSUPPORTED) {
> >> -+        //
> >> -+        // Secure Algorithm was not supported on this platform
> >> -+        //
> >> -+        DEBUG ((DEBUG_ERROR, "Failed to generate random data using 
> >> secure algorithm %d: %r\n", AlgorithmIndex, Status));
> >> -+
> >> -+        //
> >> -+        // Try the next secure algorithm
> >> -+        //
> >> -+        continue;
> >> -+      } else {
> >> -+        //
> >> -+        // Some other error occurred
> >> -+        //
> >> -+        DEBUG ((DEBUG_ERROR, "Failed to generate random data using 
> >> secure algorithm %d: %r\n", AlgorithmIndex, Status));
> >> -+        ASSERT_EFI_ERROR (Status);
> >> -+        return Status;
> >> -+      }
> >> -+    }
> >> -+
> >> -+    //
> >> -+    // If we get here, we failed to generate random data using any 
> >> secure algorithm
> >> -+    // Platform owner should ensure that at least one secure algorithm 
> >> is supported
> >> -+    //
> >> -+    ASSERT_EFI_ERROR (Status);
> >> -+    return Status;
> >> -+  }
> >> -+
> >> -+  //
> >> -+  // Lets try using the default algorithm (which may not be secure)
> >> -+  //
> >> -+  Status = RngProtocol->GetRNG (RngProtocol, NULL, OutputLength, (UINT8 
> >> *)Output);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random data: %r\n", 
> >> __func__, Status));
> >> -+    ASSERT_EFI_ERROR (Status);
> >> -+    return Status;
> >> -+  }
> >> -
> >> --  gRT->GetTime (&Time, NULL);
> >> --  Seed  = (Time.Hour << 24 | Time.Day << 16 | Time.Minute << 8 | 
> >> Time.Second);
> >> --  Seed ^= Time.Nanosecond;
> >> --  Seed ^= Time.Year << 7;
> >> -+  return EFI_SUCCESS;
> >> -+}
> >> -+
> >> -+/**
> >> -+  Generate a 32-bit pseudo-random number.
> >> -
> >> --  gBS->GetNextMonotonicCount (&MonotonicCount);
> >> --  Seed += (UINT32)MonotonicCount;
> >> -+  @param[out] Output - The buffer to store the generated random number.
> >> -
> >> --  return Seed;
> >> -+  @retval EFI_SUCCESS           On Success
> >> -+  @retval EFI_NOT_FOUND         RNG protocol not found
> >> -+  @retval Others                Error from RngProtocol->GetRNG()
> >> -+
> >> -+  @return Status code
> >> -+**/
> >> -+EFI_STATUS
> >> -+EFIAPI
> >> -+PseudoRandomU32 (
> >> -+  OUT UINT32  *Output
> >> -+  )
> >> -+{
> >> -+  return PseudoRandom (Output, sizeof (*Output));
> >> - }
> >> -
> >> - /**
> >> -diff --git a/NetworkPkg/Library/DxeNetLib/DxeNetLib.inf 
> >> b/NetworkPkg/Library/DxeNetLib/DxeNetLib.inf
> >> -index 8145d256ec..a8f534a293 100644
> >> ---- a/NetworkPkg/Library/DxeNetLib/DxeNetLib.inf
> >> -+++ b/NetworkPkg/Library/DxeNetLib/DxeNetLib.inf
> >> -@@ -3,6 +3,7 @@
> >> - #
> >> - #  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> >> - #  (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
> >> -+#  Copyright (c) Microsoft Corporation
> >> - #  SPDX-License-Identifier: BSD-2-Clause-Patent
> >> - #
> >> - ##
> >> -@@ -49,7 +50,11 @@
> >> -   gEfiSmbiosTableGuid                           ## SOMETIMES_CONSUMES  
> >> ## SystemTable
> >> -   gEfiSmbios3TableGuid                          ## SOMETIMES_CONSUMES  
> >> ## SystemTable
> >> -   gEfiAdapterInfoMediaStateGuid                 ## SOMETIMES_CONSUMES
> >> --
> >> -+  gEfiRngAlgorithmRaw                           ## CONSUMES
> >> -+  gEfiRngAlgorithmSp80090Ctr256Guid             ## CONSUMES
> >> -+  gEfiRngAlgorithmSp80090Hmac256Guid            ## CONSUMES
> >> -+  gEfiRngAlgorithmSp80090Hash256Guid            ## CONSUMES
> >> -+  gEfiRngAlgorithmArmRndr                       ## CONSUMES
> >> -
> >> - [Protocols]
> >> -   gEfiSimpleNetworkProtocolGuid                 ## SOMETIMES_CONSUMES
> >> -@@ -59,3 +64,10 @@
> >> -   gEfiComponentNameProtocolGuid                 ## SOMETIMES_CONSUMES
> >> -   gEfiComponentName2ProtocolGuid                ## SOMETIMES_CONSUMES
> >> -   gEfiAdapterInformationProtocolGuid            ## SOMETIMES_CONSUMES
> >> -+  gEfiRngProtocolGuid                           ## CONSUMES
> >> -+
> >> -+[FixedPcd]
> >> -+  gEfiNetworkPkgTokenSpaceGuid.PcdEnforceSecureRngAlgorithms ## CONSUMES
> >> -+
> >> -+[Depex]
> >> -+  gEfiRngProtocolGuid
> >> -diff --git a/NetworkPkg/NetworkPkg.dec b/NetworkPkg/NetworkPkg.dec
> >> -index 928e84fec4..ff335e957c 100644
> >> ---- a/NetworkPkg/NetworkPkg.dec
> >> -+++ b/NetworkPkg/NetworkPkg.dec
> >> -@@ -5,6 +5,7 @@
> >> - #
> >> - # Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>
> >> - # (C) Copyright 2015-2020 Hewlett Packard Enterprise Development LP<BR>
> >> -+# Copyright (c) Microsoft Corporation
> >> - #
> >> - # SPDX-License-Identifier: BSD-2-Clause-Patent
> >> - #
> >> -@@ -127,6 +128,12 @@
> >> -   # @Prompt Indicates whether SnpDxe creates event for 
> >> ExitBootServices() call.
> >> -   
> >> gEfiNetworkPkgTokenSpaceGuid.PcdSnpCreateExitBootServicesEvent|TRUE|BOOLEAN|0x1000000C
> >> -
> >> -+  ## Enforces the use of Secure UEFI spec defined RNG algorithms for all 
> >> network connections.
> >> -+  # TRUE  - Enforce the use of Secure UEFI spec defined RNG algorithms.
> >> -+  # FALSE - Do not enforce and depend on the default implementation of 
> >> RNG algorithm from the provider.
> >> -+  # @Prompt Enforce the use of Secure UEFI spec defined RNG algorithms.
> >> -+  
> >> gEfiNetworkPkgTokenSpaceGuid.PcdEnforceSecureRngAlgorithms|TRUE|BOOLEAN|0x1000000D
> >> -+
> >> - [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
> >> -   ## IPv6 DHCP Unique Identifier (DUID) Type configuration (From RFCs 
> >> 3315 and 6355).
> >> -   # 01 = DUID Based on Link-layer Address Plus Time [DUID-LLT]
> >> -diff --git a/NetworkPkg/SecurityFixes.yaml b/NetworkPkg/SecurityFixes.yaml
> >> -index 7e900483fe..2b2c794697 100644
> >> ---- a/NetworkPkg/SecurityFixes.yaml
> >> -+++ b/NetworkPkg/SecurityFixes.yaml
> >> -@@ -121,3 +121,42 @@ CVE_2023_45235:
> >> -     - http://www.openwall.com/lists/oss-security/2024/01/16/2
> >> -     - 
> >> http://packetstormsecurity.com/files/176574/PixieFail-Proof-Of-Concepts.html
> >> -     - 
> >> https://blog.quarkslab.com/pixiefail-nine-vulnerabilities-in-tianocores-edk-ii-ipv6-network-stack.html
> >> -+CVE_2023_45237:
> >> -+  commit_titles:
> >> -+    - "NetworkPkg:: SECURITY PATCH CVE 2023-45237"
> >> -+  cve: CVE-2023-45237
> >> -+  date_reported: 2023-08-28 13:56 UTC
> >> -+  description: "Bug 09 - Use of a Weak PseudoRandom Number Generator"
> >> -+  note:
> >> -+  files_impacted:
> >> -+    - NetworkPkg/Dhcp4Dxe/Dhcp4Driver.c
> >> -+    - NetworkPkg/Dhcp6Dxe/Dhcp6Driver.c
> >> -+    - NetworkPkg/DnsDxe/DnsDhcp.c
> >> -+    - NetworkPkg/DnsDxe/DnsImpl.c
> >> -+    - NetworkPkg/HttpBootDxe/HttpBootDhcp6.c
> >> -+    - NetworkPkg/IScsiDxe/IScsiCHAP.c
> >> -+    - NetworkPkg/IScsiDxe/IScsiMisc.c
> >> -+    - NetworkPkg/IScsiDxe/IScsiMisc.h
> >> -+    - NetworkPkg/Include/Library/NetLib.h
> >> -+    - NetworkPkg/Ip4Dxe/Ip4Driver.c
> >> -+    - NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c
> >> -+    - NetworkPkg/Ip6Dxe/Ip6Driver.c
> >> -+    - NetworkPkg/Ip6Dxe/Ip6If.c
> >> -+    - NetworkPkg/Ip6Dxe/Ip6Mld.c
> >> -+    - NetworkPkg/Ip6Dxe/Ip6Nd.c
> >> -+    - NetworkPkg/Ip6Dxe/Ip6Nd.h
> >> -+    - NetworkPkg/Library/DxeNetLib/DxeNetLib.c
> >> -+    - NetworkPkg/Library/DxeNetLib/DxeNetLib.inf
> >> -+    - NetworkPkg/NetworkPkg.dec
> >> -+    - NetworkPkg/TcpDxe/TcpDriver.c
> >> -+    - NetworkPkg/Udp4Dxe/Udp4Driver.c
> >> -+    - NetworkPkg/Udp6Dxe/Udp6Driver.c
> >> -+    - NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c
> >> -+    - NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c
> >> -+    - NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c
> >> -+  links:
> >> -+    - https://bugzilla.tianocore.org/show_bug.cgi?id=4542
> >> -+    - https://nvd.nist.gov/vuln/detail/CVE-2023-45237
> >> -+    - http://www.openwall.com/lists/oss-security/2024/01/16/2
> >> -+    - 
> >> http://packetstormsecurity.com/files/176574/PixieFail-Proof-Of-Concepts.html
> >> -+    - 
> >> https://blog.quarkslab.com/pixiefail-nine-vulnerabilities-in-tianocores-edk-ii-ipv6-network-stack.html
> >> -diff --git a/NetworkPkg/TcpDxe/TcpDriver.c b/NetworkPkg/TcpDxe/TcpDriver.c
> >> -index 98a90e0210..8fe6badd68 100644
> >> ---- a/NetworkPkg/TcpDxe/TcpDriver.c
> >> -+++ b/NetworkPkg/TcpDxe/TcpDriver.c
> >> -@@ -2,7 +2,7 @@
> >> -   The driver binding and service binding protocol for the TCP driver.
> >> -
> >> -   Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> >> --
> >> -+  Copyright (c) Microsoft Corporation
> >> -   SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -163,7 +163,13 @@ TcpDriverEntryPoint (
> >> -   )
> >> - {
> >> -   EFI_STATUS  Status;
> >> --  UINT32      Seed;
> >> -+  UINT32      Random;
> >> -+
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a Failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -
> >> -   //
> >> -   // Install the TCP Driver Binding Protocol
> >> -@@ -203,9 +209,8 @@ TcpDriverEntryPoint (
> >> -   //
> >> -   // Initialize ISS and random port.
> >> -   //
> >> --  Seed            = NetRandomInitSeed ();
> >> --  mTcpGlobalIss   = NET_RANDOM (Seed) % mTcpGlobalIss;
> >> --  mTcp4RandomPort = (UINT16)(TCP_PORT_KNOWN + (NET_RANDOM (Seed) % 
> >> TCP_PORT_KNOWN));
> >> -+  mTcpGlobalIss   = Random % mTcpGlobalIss;
> >> -+  mTcp4RandomPort = (UINT16)(TCP_PORT_KNOWN + (Random % TCP_PORT_KNOWN));
> >> -   mTcp6RandomPort = mTcp4RandomPort;
> >> -
> >> -   return EFI_SUCCESS;
> >> -diff --git a/NetworkPkg/TcpDxe/TcpDxe.inf b/NetworkPkg/TcpDxe/TcpDxe.inf
> >> -index c0acbdca57..cf5423f4c5 100644
> >> ---- a/NetworkPkg/TcpDxe/TcpDxe.inf
> >> -+++ b/NetworkPkg/TcpDxe/TcpDxe.inf
> >> -@@ -82,5 +82,8 @@
> >> -   gEfiTcp6ProtocolGuid                          ## BY_START
> >> -   gEfiTcp6ServiceBindingProtocolGuid            ## BY_START
> >> -
> >> -+[Depex]
> >> -+  gEfiHash2ServiceBindingProtocolGuid
> >> -+
> >> - [UserExtensions.TianoCore."ExtraFiles"]
> >> -   TcpDxeExtra.uni
> >> -diff --git a/NetworkPkg/Udp4Dxe/Udp4Driver.c 
> >> b/NetworkPkg/Udp4Dxe/Udp4Driver.c
> >> -index cb917fcfc9..c7ea16f4cd 100644
> >> ---- a/NetworkPkg/Udp4Dxe/Udp4Driver.c
> >> -+++ b/NetworkPkg/Udp4Dxe/Udp4Driver.c
> >> -@@ -1,6 +1,7 @@
> >> - /** @file
> >> -
> >> - Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> >> -+Copyright (c) Microsoft Corporation
> >> - SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -555,6 +556,13 @@ Udp4DriverEntryPoint (
> >> -   )
> >> - {
> >> -   EFI_STATUS  Status;
> >> -+  UINT32      Random;
> >> -+
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -
> >> -   //
> >> -   // Install the Udp4DriverBinding and Udp4ComponentName protocols.
> >> -@@ -571,7 +579,7 @@ Udp4DriverEntryPoint (
> >> -     //
> >> -     // Initialize the UDP random port.
> >> -     //
> >> --    mUdp4RandomPort = (UINT16)(((UINT16)NetRandomInitSeed ()) % 
> >> UDP4_PORT_KNOWN + UDP4_PORT_KNOWN);
> >> -+    mUdp4RandomPort = (UINT16)(((UINT16)Random) % UDP4_PORT_KNOWN + 
> >> UDP4_PORT_KNOWN);
> >> -   }
> >> -
> >> -   return Status;
> >> -diff --git a/NetworkPkg/Udp6Dxe/Udp6Driver.c 
> >> b/NetworkPkg/Udp6Dxe/Udp6Driver.c
> >> -index ae96fb9966..edb758d57c 100644
> >> ---- a/NetworkPkg/Udp6Dxe/Udp6Driver.c
> >> -+++ b/NetworkPkg/Udp6Dxe/Udp6Driver.c
> >> -@@ -2,7 +2,7 @@
> >> -   Driver Binding functions and Service Binding functions for the Network 
> >> driver module.
> >> -
> >> -   Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> >> --
> >> -+  Copyright (c) Microsoft Corporation
> >> -   SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -596,6 +596,13 @@ Udp6DriverEntryPoint (
> >> -   )
> >> - {
> >> -   EFI_STATUS  Status;
> >> -+  UINT32      Random;
> >> -+
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -
> >> -   //
> >> -   // Install the Udp6DriverBinding and Udp6ComponentName protocols.
> >> -@@ -614,7 +621,7 @@ Udp6DriverEntryPoint (
> >> -     // Initialize the UDP random port.
> >> -     //
> >> -     mUdp6RandomPort = (UINT16)(
> >> --                               ((UINT16)NetRandomInitSeed ()) %
> >> -+                               ((UINT16)Random) %
> >> -                                UDP6_PORT_KNOWN +
> >> -                                UDP6_PORT_KNOWN
> >> -                                );
> >> -diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c 
> >> b/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c
> >> -index 91146b78cb..452038c219 100644
> >> ---- a/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c
> >> -+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c
> >> -@@ -2,7 +2,7 @@
> >> -   Functions implementation related with DHCPv4 for UefiPxeBc Driver.
> >> -
> >> -   Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> >> --
> >> -+  Copyright (c) Microsoft Corporation
> >> -   SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> - **/
> >> -@@ -1381,6 +1381,12 @@ PxeBcDhcp4Discover (
> >> -   UINT8                             VendorOptLen;
> >> -   UINT32                            Xid;
> >> -
> >> -+  Status = PseudoRandomU32 (&Xid);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -+
> >> -   Mode   = Private->PxeBc.Mode;
> >> -   Dhcp4  = Private->Dhcp4;
> >> -   Status = EFI_SUCCESS;
> >> -@@ -1471,7 +1477,6 @@ PxeBcDhcp4Discover (
> >> -   //
> >> -   // Set fields of the token for the request packet.
> >> -   //
> >> --  Xid                                 = NET_RANDOM (NetRandomInitSeed 
> >> ());
> >> -   Token.Packet->Dhcp4.Header.Xid      = HTONL (Xid);
> >> -   Token.Packet->Dhcp4.Header.Reserved = HTONS ((UINT16)((IsBCast) ? 
> >> 0x8000 : 0x0));
> >> -   CopyMem (&Token.Packet->Dhcp4.Header.ClientAddr, &Private->StationIp, 
> >> sizeof (EFI_IPv4_ADDRESS));
> >> -diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c 
> >> b/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c
> >> -index 7fd1281c11..bcabbd2219 100644
> >> ---- a/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c
> >> -+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c
> >> -@@ -2180,7 +2180,7 @@ PxeBcDhcp6Discover (
> >> -   UINTN                            ReadSize;
> >> -   UINT16                           OpCode;
> >> -   UINT16                           OpLen;
> >> --  UINT32                           Xid;
> >> -+  UINT32                           Random;
> >> -   EFI_STATUS                       Status;
> >> -   UINTN                            DiscoverLenNeeded;
> >> -
> >> -@@ -2198,6 +2198,12 @@ PxeBcDhcp6Discover (
> >> -     return EFI_DEVICE_ERROR;
> >> -   }
> >> -
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", 
> >> __func__, Status));
> >> -+    return Status;
> >> -+  }
> >> -+
> >> -   DiscoverLenNeeded = sizeof (EFI_PXE_BASE_CODE_DHCPV6_PACKET);
> >> -   Discover          = AllocateZeroPool (DiscoverLenNeeded);
> >> -   if (Discover == NULL) {
> >> -@@ -2207,8 +2213,7 @@ PxeBcDhcp6Discover (
> >> -   //
> >> -   // Build the discover packet by the cached request packet before.
> >> -   //
> >> --  Xid                     = NET_RANDOM (NetRandomInitSeed ());
> >> --  Discover->TransactionId = HTONL (Xid);
> >> -+  Discover->TransactionId = HTONL (Random);
> >> -   Discover->MessageType   = Request->Dhcp6.Header.MessageType;
> >> -   RequestOpt              = Request->Dhcp6.Option;
> >> -   DiscoverOpt             = Discover->DhcpOptions;
> >> -diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c 
> >> b/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c
> >> -index d84aca7e85..4cd915b411 100644
> >> ---- a/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c
> >> -+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c
> >> -@@ -3,6 +3,7 @@
> >> -
> >> -   (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
> >> -   Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR>
> >> -+  Copyright (c) Microsoft Corporation
> >> -
> >> -   SPDX-License-Identifier: BSD-2-Clause-Patent
> >> -
> >> -@@ -892,6 +893,13 @@ PxeBcCreateIp6Children (
> >> -   PXEBC_PRIVATE_PROTOCOL       *Id;
> >> -   EFI_SIMPLE_NETWORK_PROTOCOL  *Snp;
> >> -   UINTN                        Index;
> >> -+  UINT32                       Random;
> >> -+
> >> -+  Status = PseudoRandomU32 (&Random);
> >> -+  if (EFI_ERROR (Status)) {
> >> -+    DEBUG ((DEBUG_ERROR, "Failed to generate random number using 
> >> EFI_RNG_PROTOCOL: %r\n", Status));
> >> -+    return Status;
> >> -+  }
> >> -
> >> -   if (Private->Ip6Nic != NULL) {
> >> -     //
> >> -@@ -935,9 +943,9 @@ PxeBcCreateIp6Children (
> >> -   }
> >> -
> >> -   //
> >> --  // Generate a random IAID for the Dhcp6 assigned address.
> >> -+  // Set a random IAID for the Dhcp6 assigned address.
> >> -   //
> >> --  Private->IaId = NET_RANDOM (NetRandomInitSeed ());
> >> -+  Private->IaId = Random;
> >> -   if (Private->Snp != NULL) {
> >> -     for (Index = 0; Index < Private->Snp->Mode->HwAddressSize; Index++) {
> >> -       Private->IaId |= (Private->Snp->Mode->CurrentAddress.Addr[Index] 
> >> << ((Index << 3) & 31));
> >> ---
> >> -2.40.0
> >> -
> >> diff --git a/meta/recipes-core/ovmf/ovmf_git.bb 
> >> b/meta/recipes-core/ovmf/ovmf_git.bb
> >> index d52e3f4971..bb345688ac 100644
> >> --- a/meta/recipes-core/ovmf/ovmf_git.bb
> >> +++ b/meta/recipes-core/ovmf/ovmf_git.bb
> >> @@ -47,8 +47,6 @@ SRC_URI = 
> >> "gitsm://github.com/tianocore/edk2.git;branch=master;protocol=https \
> >>              file://CVE-2023-45229-0002.patch \
> >>              file://CVE-2023-45229-0003.patch \
> >>              file://CVE-2023-45229-0004.patch \
> >> -           file://CVE-2023-45237-0001.patch \
> >> -           file://CVE-2023-45237-0002.patch \
> >>              file://CVE-2023-45236.patch \
> >>              file://CVE-2022-36765-0001.patch \
> >>              file://CVE-2022-36765-0002.patch \
> >> --
> >> 2.34.1
> >>
> >>
> >> 
> >>
>
> --
> Kai Kang
> Wind River Linux
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#211760): 
https://lists.openembedded.org/g/openembedded-core/message/211760
Mute This Topic: https://lists.openembedded.org/mt/111267276/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to