]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/PlatformDriOverrideDxe/PlatDriOverrideLib.c
MdeModulePkg/PlatformDriOverrideDxe: Fix overflow condition check
[mirror_edk2.git] / MdeModulePkg / Universal / PlatformDriOverrideDxe / PlatDriOverrideLib.c
index d49f6c9953f5f8afc4a1cd8c36bbd4a67f1a3588..bd2d04452f8bb87e7da2941fa146a39ea54d9bfa 100644 (file)
@@ -1,14 +1,8 @@
 /** @file\r
   Implementation of the shared functions to do the platform driver vverride mapping.\r
 \r
-  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -782,7 +776,7 @@ InitOverridesMapping (
         // Check buffer overflow\r
         //\r
         if ((DriverImageInfo->DriverImagePath == NULL) || (VariableIndex < (UINT8 *) DriverDevicePath) ||\r
-            (VariableIndex < (UINT8 *) VariableBuffer + BufferSize)) {\r
+            (VariableIndex > (UINT8 *) VariableBuffer + BufferSize)) {\r
           Corrupted = TRUE;\r
           break;\r
         }\r
@@ -1492,6 +1486,15 @@ GetDriverFromMapping (
                 DriverImageInfo->ImageHandle = ImageHandle;\r
               }\r
             } else {\r
+              //\r
+              // With EFI_SECURITY_VIOLATION retval, the Image was loaded and an ImageHandle was created\r
+              // with a valid EFI_LOADED_IMAGE_PROTOCOL, but the image can not be started right now.\r
+              // If the caller doesn't have the option to defer the execution of an image, we should\r
+              // unload image for the EFI_SECURITY_VIOLATION to avoid resource leak.\r
+              //\r
+              if (Status == EFI_SECURITY_VIOLATION) {\r
+                gBS->UnloadImage (ImageHandle);\r
+              }\r
               DriverImageInfo->UnLoadable = TRUE;\r
               DriverImageInfo->ImageHandle = NULL;\r
             }\r