Unverified Commit 21aed90c authored by Will Fancher's avatar Will Fancher Committed by GitHub
Browse files

Merge pull request #325348 from JulienMalka/remove-uefi-large-file-test

nixos/tests/systemd-boot: remove uefiLargeFileWorkaround test
parents 3dd38180 107fe872
Loading
Loading
Loading
Loading
+0 −25
Original line number Diff line number Diff line
From d87a7513c6f2f2824203032ef27caeb84892ed7e Mon Sep 17 00:00:00 2001
From: Will Fancher <elvishjerricco@gmail.com>
Date: Tue, 30 May 2023 16:53:20 -0400
Subject: [PATCH] Intentionally break the fat driver

---
 FatPkg/EnhancedFatDxe/ReadWrite.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/FatPkg/EnhancedFatDxe/ReadWrite.c b/FatPkg/EnhancedFatDxe/ReadWrite.c
index 8f525044d1f1..32c62ff7817b 100644
--- a/FatPkg/EnhancedFatDxe/ReadWrite.c
+++ b/FatPkg/EnhancedFatDxe/ReadWrite.c
@@ -216,6 +216,11 @@ FatIFileAccess (
   Volume = OFile->Volume;
   Task   = NULL;
 
+  if (*BufferSize > (10U * 1024U * 1024U)) {
+    IFile->Position += 10U * 1024U * 1024U;
+    return EFI_BAD_BUFFER_SIZE;
+  }
+
   //
   // Write to a directory is unsupported
   //
+0 −26
Original line number Diff line number Diff line
@@ -428,32 +428,6 @@ in
      '';
  };

  # Some UEFI firmwares fail on large reads. Now that systemd-boot loads initrd
  # itself, systems with such firmware won't boot without this fix
  uefiLargeFileWorkaround = makeTest {
    name = "uefi-large-file-workaround";
    meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
    nodes.machine = { pkgs, ... }: {
      imports = [common];
      virtualisation.efi.OVMF = pkgs.OVMF.overrideAttrs (old: {
        # This patch deliberately breaks the FAT driver in EDK2 to
        # exhibit (part of) the firmware bug that we are testing
        # for. Files greater than 10MiB will fail to be read in a
        # single Read() call, so systemd-boot will fail to load the
        # initrd without a workaround. The number 10MiB was chosen
        # because if it were smaller than the kernel size, even the
        # LoadImage call would fail, which is not the failure mode
        # we're testing for. It needs to be between the kernel size
        # and the initrd size.
        patches = old.patches or [] ++ [ ./systemd-boot-ovmf-broken-fat-driver.patch ];
      });
    };

    testScript = ''
      machine.wait_for_unit("multi-user.target")
    '';
  };

  no-bootspec = makeTest
    {
      name = "systemd-boot-no-bootspec";