Hello Fu,
On 4 September 2017 at 09:07, Fu Siyuan <[email protected]> wrote:
> The IP driver uses EfiCreateProtocolNotifyEvent() to register notify callback
> function for IpSec protocol, but it didn't notice that the callback will
> always
> be executed at least once, even the protocol wasn't in handle database.
> As a result, the Ip4IpSecProcessPacket() will still always call
> LocateProtocol()
> even the IpSec protocol is not installed, which will impact the network
> performance.
>
> Cc: Ye Ting <[email protected]>
> Cc: Wu Jiaxin <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Fu Siyuan <[email protected]>
> ---
> MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c | 14 +++++++++++---
> MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Input.c | 10 ++--------
> 2 files changed, 13 insertions(+), 11 deletions(-)
>
> diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c
> b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c
> index 792db5c..03ba458 100644
> --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c
> +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c
> @@ -41,12 +41,20 @@ IpSec2InstalledCallback (
> IN VOID *Context
> )
> {
> + EFI_STATUS Status;
> //
> - // Close the event so it does not get called again.
> + // Test if protocol was even found.
> + // Notification function will be called at least once.
> //
> - gBS->CloseEvent (Event);
> + Status = gBS->LocateProtocol (&gEfiIpSec2ProtocolGuid, NULL, &mIpSec);
While moving this call here from below, you removed the (void **)
cast, which breaks the build on GCC
In function 'IpSec2InstalledCallback':
49:3: error: passing argument 3 of 'gBS->LocateProtocol' from
incompatible pointer type [-Werror]
Status = gBS->LocateProtocol (&gEfiIpSec2ProtocolGuid, NULL, &mIpSec);
^
49:3: note: expected 'void **' but argument is of type 'struct
EFI_IPSEC2_PROTOCOL **'
cc1: all warnings being treated as errors
Please fix.
Kind regards,
Ard,
> + if (Status == EFI_SUCCESS && mIpSec != NULL) {
> + //
> + // Close the event so it does not get called again.
> + //
> + gBS->CloseEvent (Event);
>
> - mIpSec2Installed = TRUE;
> + mIpSec2Installed = TRUE;
> + }
> }
>
> /**
> diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Input.c
> b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Input.c
> index 09b8f2b..e694323 100644
> --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Input.c
> +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Input.c
> @@ -1,7 +1,7 @@
> /** @file
> IP4 input process.
>
> -Copyright (c) 2005 - 2014, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2005 - 2017, Intel Corporation. All rights reserved.<BR>
> (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
>
> This program and the accompanying materials
> @@ -518,6 +518,7 @@ Ip4IpSecProcessPacket (
> if (!mIpSec2Installed) {
> goto ON_EXIT;
> }
> + ASSERT (mIpSec != NULL);
>
> Packet = *Netbuf;
> RecycleEvent = NULL;
> @@ -527,13 +528,6 @@ Ip4IpSecProcessPacket (
> FragmentCount = Packet->BlockOpNum;
>
> ZeroMem (&ZeroHead, sizeof (IP4_HEAD));
> -
> - if (mIpSec == NULL) {
> - gBS->LocateProtocol (&gEfiIpSec2ProtocolGuid, NULL, (VOID **) &mIpSec);
> - if (mIpSec == NULL) {
> - goto ON_EXIT;
> - }
> - }
>
> //
> // Check whether the IPsec enable variable is set.
> --
> 1.9.5.msysgit.1
>
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel