]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Veto the Itautec Ip4ConfigDxe driver
authorMichael Brown <mcb30@ipxe.org>
Fri, 11 Jun 2021 13:46:54 +0000 (14:46 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 11 Jun 2021 14:14:21 +0000 (15:14 +0100)
The Ip4ConfigDxe driver bug that was observed on Dell systems in
commit 64b4452 ("[efi] Blacklist the Dell Ip4ConfigDxe driver") has
also been observed on systems with a manufacturer name of "Itautec
S.A.".  The symptoms of the bug are identical: an attempt to call
DisconnectController() on the LOM device handle will lock up the
system.

Fix by extending the veto to cover the Ip4ConfigDxe driver for this
manufacturer.

Debugged-by: Celso Viana <celso.vianna@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/interface/efi/efi_veto.c

index 6ff7898e92473dffecfc009ab5fa5feb97cb0e13..b616539d369b9422d919bc5497f61277c5d10ec4 100644 (file)
@@ -362,7 +362,7 @@ static int efi_veto_driver ( EFI_HANDLE driver ) {
 }
 
 /**
- * Veto Dell Ip4ConfigDxe driver
+ * Veto Ip4ConfigDxe driver on some platforms
  *
  * @v binding          Driver binding protocol
  * @v loaded           Loaded image protocol
@@ -372,19 +372,21 @@ static int efi_veto_driver ( EFI_HANDLE driver ) {
  * @ret vetoed         Driver is to be vetoed
  */
 static int
-efi_veto_dell_ip4config ( EFI_DRIVER_BINDING_PROTOCOL *binding __unused,
-                         EFI_LOADED_IMAGE_PROTOCOL *loaded __unused,
-                         EFI_COMPONENT_NAME_PROTOCOL *wtf __unused,
-                         const char *manufacturer, const CHAR16 *name ) {
+efi_veto_ip4config ( EFI_DRIVER_BINDING_PROTOCOL *binding __unused,
+                    EFI_LOADED_IMAGE_PROTOCOL *loaded __unused,
+                    EFI_COMPONENT_NAME_PROTOCOL *wtf __unused,
+                    const char *manufacturer, const CHAR16 *name ) {
        static const CHAR16 ip4cfg[] = L"IP4 CONFIG Network Service Driver";
        static const char *dell = "Dell Inc.";
+       static const char *itautec = "Itautec S.A.";
 
        /* Check manufacturer and driver name */
        if ( ! manufacturer )
                return 0;
        if ( ! name )
                return 0;
-       if ( strcmp ( manufacturer, dell ) != 0 )
+       if ( ( strcmp ( manufacturer, dell ) != 0 ) &&
+            ( strcmp ( manufacturer, itautec ) != 0 ) )
                return 0;
        if ( memcmp ( name, ip4cfg, sizeof ( ip4cfg ) ) != 0 )
                return 0;
@@ -436,8 +438,8 @@ efi_veto_hp_xhci ( EFI_DRIVER_BINDING_PROTOCOL *binding __unused,
 /** Driver vetoes */
 static struct efi_veto efi_vetoes[] = {
        {
-               .name = "Dell Ip4Config",
-               .veto = efi_veto_dell_ip4config,
+               .name = "Ip4Config",
+               .veto = efi_veto_ip4config,
        },
        {
                .name = "HP Xhci",