diff --git a/pkgs/tools/system/efibootmgr/arbitrary-filenames.patch b/pkgs/tools/system/efibootmgr/arbitrary-filenames.patch new file mode 100644 index 00000000000..ae542ac8795 --- /dev/null +++ b/pkgs/tools/system/efibootmgr/arbitrary-filenames.patch @@ -0,0 +1,24 @@ +diff -Naur efibootmgr-0.5.4-orig/src/lib/efi.c efibootmgr-0.5.4/src/lib/efi.c +--- efibootmgr-0.5.4-orig/src/lib/efi.c 2008-01-03 15:34:01.000000000 +0100 ++++ efibootmgr-0.5.4/src/lib/efi.c 2012-03-13 22:25:51.000000000 +0100 +@@ -495,7 +495,8 @@ + int rc, edd_version=0; + uint8_t mbr_type=0, signature_type=0; + uint64_t start=0, size=0; +- efi_char16_t os_loader_path[40]; ++ efi_char16_t *os_loader_path; ++ size_t os_loader_path_size; + + memset(signature, 0, sizeof(signature)); + +@@ -535,7 +536,9 @@ + signature, + mbr_type, signature_type); + +- efichar_from_char(os_loader_path, opts.loader, sizeof(os_loader_path)); ++ os_loader_path_size = sizeof(efi_char16_t) * (1 + strlen(opts.loader) / sizeof(char)); ++ os_loader_path = malloc(os_loader_path_size); ++ efichar_from_char(os_loader_path, opts.loader, os_loader_path_size); + p += make_file_path_device_path (p, os_loader_path); + p += make_end_device_path (p); + diff --git a/pkgs/tools/system/efibootmgr/default.nix b/pkgs/tools/system/efibootmgr/default.nix index bf4c429808b..618454d87a4 100644 --- a/pkgs/tools/system/efibootmgr/default.nix +++ b/pkgs/tools/system/efibootmgr/default.nix @@ -7,13 +7,14 @@ stdenv.mkDerivation { buildInputs = [ pciutils zlib perl ]; + patches = [ ./arbitrary-filenames.patch ]; src = fetchurl { url = "http://linux.dell.com/efibootmgr/permalink/efibootmgr-${version}.tar.gz"; sha256 = "0wcfgf8x4p4xfh38m9x3njwsxibm9bhnmvpjj94lj9sk9xxa8qmm"; }; - patchPhase = '' + postPatch = '' substituteInPlace "./tools/install.pl" \ --replace "/usr/bin/perl" "${perl}/bin/perl" '';