diff -Nru grub2-2.04/debian/build-efi-images grub2-2.04/debian/build-efi-images --- grub2-2.04/debian/build-efi-images 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/build-efi-images 2021-02-11 16:22:32.000000000 +0000 @@ -70,6 +70,8 @@ cat >"$workdir/grub-netboot.cfg" < Thu, 11 Feb 2021 16:34:27 +0000 + +grub2 (2.04-1ubuntu38) hirsute; urgency=medium + + [ Jean-Baptiste Lallement ] + [ Didier Roche ] + * Fix warnings during grub menu generation. Thanks wdoekes for the patch + (LP: #1898177) + - Fix warnings when bpool doesn't exist. + - Fix warnings when snapshot name contains dashes. + * Do not fail to generate grub menu when name of the snapshot contains + spaces. (LP: #1903524) + + -- Jean-Baptiste Lallement Mon, 08 Feb 2021 10:50:21 +0100 + +grub2 (2.04-1ubuntu37) hirsute; urgency=medium * debian/patches/grub-install-backup-and-restore.patch: Fix-up the patch to correctly initialyze the names of the modules to restore. LP: #1907085 + * 10_linux: emit messages when initrdless boot is configured, attempted + and fails triggering fallback. LP: #1901553 + * grub-common.service: port init.d script to systemd unit. Add warning + message, when initrdless boot fails triggering fallback. LP: #1901553 + * debian/rules: undo po/ directory patching in + override_dh_autoreconf_clean. + * minilzo: built using the distribution's minilzo + * ubuntu-fix-reproducible-squashfs-test.patch: fix squashfs-test with + new squashfs-tools in hirsute. * rhboot-f34-make-exit-take-a-return-code.patch, rhboot-f34-dont-use-int-for-efi-status.patch: allow grub to exit non-zero under EFI, this should allow falling back to the next - BootOrder BootEntry. LP: #1865515 + BootOrder BootEntry. * rhboot-f34-tcp-add-window-scaling-support.patch: speed up netboot - transfer speed. LP: #1911439 + transfer speed. * rhboot-f34-support-non-ethernet.patch, ubuntu-fixup-rhboot-f34-support-non-ethernet.patch, ubuntu-fixup-rhboot-f34-support-non-ethernet-2.patch: - add support for link layer addresses of up to 32-bytes. LP: #1911439 + add support for link layer addresses of up to 32-bytes. * rhboot-f34-make-pmtimer-tsc-calibration-fast.patch: - speed up calibration time, especially when booting VMs. LP: #1911439 - * minilzo: built using the distribution's minilzo. LP: #1911440 + speed up calibration time, especially when booting VMs. - -- Dimitri John Ledkov Thu, 14 Jan 2021 12:30:56 +0000 + -- Dimitri John Ledkov Sat, 12 Dec 2020 00:50:47 +0000 -grub2 (2.04-1ubuntu35.1) groovy; urgency=medium +grub2 (2.04-1ubuntu36) hirsute; urgency=medium * Avoid "EFI stub: FIRMWARE BUG" message when booting >= 5.7 kernels on arm64 by setting the image base address before jumping to the PE/COFF entry point LP: #1900774 - * Fix tftp timeouts when fetching large files. LP: #1900773 + * Fix tftp timeouts when fetch large files. LP: #1900773 - -- dann frazier Thu, 12 Nov 2020 16:08:57 -0700 + -- dann frazier Wed, 11 Nov 2020 07:17:49 -0700 grub2 (2.04-1ubuntu35) groovy; urgency=medium diff -Nru grub2-2.04/debian/.git-dpm grub2-2.04/debian/.git-dpm --- grub2-2.04/debian/.git-dpm 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/.git-dpm 2021-02-11 16:22:35.000000000 +0000 @@ -1,6 +1,6 @@ # see git-dpm(1) from git-dpm package -b5a3b6e2e88679503375bcedc7f1adeda23f0877 -b5a3b6e2e88679503375bcedc7f1adeda23f0877 +f6684f1ec1ea814bd6d4bbf664e44c6feac20953 +f6684f1ec1ea814bd6d4bbf664e44c6feac20953 578bb115fbd47e1c464696f1f8d6183e5443975d 578bb115fbd47e1c464696f1f8d6183e5443975d grub2_2.04.orig.tar.xz diff -Nru grub2-2.04/debian/grub-common.service grub2-2.04/debian/grub-common.service --- grub2-2.04/debian/grub-common.service 1970-01-01 00:00:00.000000000 +0000 +++ grub2-2.04/debian/grub-common.service 2021-02-11 16:22:32.000000000 +0000 @@ -0,0 +1,14 @@ +[Unit] +Description=Record successful boot for GRUB + +[Service] +Type=simple +Restart=no +RemainAfterExit=yes +ExecStartPre=/bin/sh -c '[ -s /boot/grub/grubenv ] || rm -f /boot/grub/grubenv; mkdir -p /boot/grub' +ExecStart=grub-editenv /boot/grub/grubenv unset recordfail +ExecStartPost=/bin/sh -c 'if grub-editenv /boot/grub/grubenv list | grep -q initrdless_boot_fallback_triggered=1; then echo "grub: GRUB_FORCE_PARTUUID set, initrdless boot paniced, fallback triggered."; fi' +StandardOutput=kmsg + +[Install] +WantedBy=multi-user.target diff -Nru grub2-2.04/debian/patches/0074-uefi-firmware-rename-fwsetup-menuentry-to-UEFI-Firmw.patch grub2-2.04/debian/patches/0074-uefi-firmware-rename-fwsetup-menuentry-to-UEFI-Firmw.patch --- grub2-2.04/debian/patches/0074-uefi-firmware-rename-fwsetup-menuentry-to-UEFI-Firmw.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0074-uefi-firmware-rename-fwsetup-menuentry-to-UEFI-Firmw.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 7bae32b384bf0129a980b77447e21abb4024f693 Mon Sep 17 00:00:00 2001 +From 2ab59eb747c4ffea04b87738d53654c981ad9bfb Mon Sep 17 00:00:00 2001 From: Dimitri John Ledkov Date: Mon, 24 Feb 2020 20:29:53 +0000 Subject: uefi-firmware: rename fwsetup menuentry to UEFI Firmware Settings @@ -9,7 +9,7 @@ 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/grub.d/30_uefi-firmware.in b/util/grub.d/30_uefi-firmware.in -index 3c9f533d8..b072d219f 100644 +index 3c9f533d8c..b072d219f6 100644 --- a/util/grub.d/30_uefi-firmware.in +++ b/util/grub.d/30_uefi-firmware.in @@ -32,9 +32,9 @@ OsIndications="$efi_vars_dir/OsIndicationsSupported-$EFI_GLOBAL_VARIABLE/data" diff -Nru grub2-2.04/debian/patches/0075-smbios-Add-a-linux-argument-to-apply-linux-modalias-.patch grub2-2.04/debian/patches/0075-smbios-Add-a-linux-argument-to-apply-linux-modalias-.patch --- grub2-2.04/debian/patches/0075-smbios-Add-a-linux-argument-to-apply-linux-modalias-.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0075-smbios-Add-a-linux-argument-to-apply-linux-modalias-.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 484c805e1361fd010e0c3e2c44585f5f7e3899c1 Mon Sep 17 00:00:00 2001 +From 3e978cdf11a1bd71e4f55478dd4e9099e4a72654 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 3 Mar 2020 16:06:34 +0100 Subject: smbios: Add a --linux argument to apply linux modalias-like filtering @@ -16,7 +16,7 @@ 1 file changed, 24 insertions(+) diff --git a/grub-core/commands/smbios.c b/grub-core/commands/smbios.c -index 7a6a391fc..1a9086ddd 100644 +index 7a6a391fc1..1a9086ddd4 100644 --- a/grub-core/commands/smbios.c +++ b/grub-core/commands/smbios.c @@ -64,6 +64,21 @@ grub_smbios_get_eps3 (void) diff -Nru grub2-2.04/debian/patches/0076-ubuntu-Make-the-linux-command-in-EFI-grub-always-try.patch grub2-2.04/debian/patches/0076-ubuntu-Make-the-linux-command-in-EFI-grub-always-try.patch --- grub2-2.04/debian/patches/0076-ubuntu-Make-the-linux-command-in-EFI-grub-always-try.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0076-ubuntu-Make-the-linux-command-in-EFI-grub-always-try.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 80b0e6a9375628f209b96173ce0a3af70060131c Mon Sep 17 00:00:00 2001 +From 16f433a2d4f8c4ea40077b8b6dc8efcd3d16c2ae Mon Sep 17 00:00:00 2001 From: Chris Coulson Date: Wed, 11 Mar 2020 16:46:00 +0100 Subject: ubuntu: Make the linux command in EFI grub always try EFI handover @@ -18,7 +18,7 @@ 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/grub-core/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c -index 6b6aef87f..fe3ca2c59 100644 +index 6b6aef87f7..fe3ca2c596 100644 --- a/grub-core/loader/i386/efi/linux.c +++ b/grub-core/loader/i386/efi/linux.c @@ -27,6 +27,7 @@ @@ -51,7 +51,7 @@ params = grub_efi_allocate_pages_max (0x3fffffff, diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c -index 4328bcbdb..991eb29db 100644 +index 4328bcbdb0..991eb29db9 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -658,35 +658,40 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), diff -Nru grub2-2.04/debian/patches/0077-ubuntu-Update-the-linux-boot-protocol-version-check.patch grub2-2.04/debian/patches/0077-ubuntu-Update-the-linux-boot-protocol-version-check.patch --- grub2-2.04/debian/patches/0077-ubuntu-Update-the-linux-boot-protocol-version-check.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0077-ubuntu-Update-the-linux-boot-protocol-version-check.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From f59fbf2d6ae70d8872d8b680cfccb6e139410944 Mon Sep 17 00:00:00 2001 +From eb5c0d0b0e52a52dec1f553db11a19133abe0243 Mon Sep 17 00:00:00 2001 From: Chris Coulson Date: Wed, 11 Mar 2020 16:46:41 +0100 Subject: ubuntu: Update the linux boot protocol version check. @@ -11,7 +11,7 @@ 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grub-core/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c -index fe3ca2c59..2929da7a2 100644 +index fe3ca2c596..2929da7a29 100644 --- a/grub-core/loader/i386/efi/linux.c +++ b/grub-core/loader/i386/efi/linux.c @@ -245,7 +245,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), diff -Nru grub2-2.04/debian/patches/0081-yylex-Make-lexer-fatal-errors-actually-be-fatal.patch grub2-2.04/debian/patches/0081-yylex-Make-lexer-fatal-errors-actually-be-fatal.patch --- grub2-2.04/debian/patches/0081-yylex-Make-lexer-fatal-errors-actually-be-fatal.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0081-yylex-Make-lexer-fatal-errors-actually-be-fatal.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From e25ff4f02fae2c006408a8fa1283320cd81ff87d Mon Sep 17 00:00:00 2001 +From aba4f8fd4b27dd1c3db6d992b417366147989080 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Wed, 15 Apr 2020 15:45:02 -0400 Subject: yylex: Make lexer fatal errors actually be fatal @@ -47,7 +47,7 @@ 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grub-core/script/yylex.l b/grub-core/script/yylex.l -index 7b44c37b7..b7203c823 100644 +index 7b44c37b76..b7203c8230 100644 --- a/grub-core/script/yylex.l +++ b/grub-core/script/yylex.l @@ -37,11 +37,11 @@ diff -Nru grub2-2.04/debian/patches/0082-safemath-Add-some-arithmetic-primitives-that-check-f.patch grub2-2.04/debian/patches/0082-safemath-Add-some-arithmetic-primitives-that-check-f.patch --- grub2-2.04/debian/patches/0082-safemath-Add-some-arithmetic-primitives-that-check-f.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0082-safemath-Add-some-arithmetic-primitives-that-check-f.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From daa399d191529cbbe465cfe3ecf5e90cada76786 Mon Sep 17 00:00:00 2001 +From 90dff2044d8f86bbf1ca1999ba3f6c9e452f275e Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 15 Jun 2020 10:58:42 -0400 Subject: safemath: Add some arithmetic primitives that check for overflow @@ -25,7 +25,7 @@ create mode 100644 include/grub/safemath.h diff --git a/INSTALL b/INSTALL -index 342c158e9..991479b52 100644 +index 342c158e91..991479b521 100644 --- a/INSTALL +++ b/INSTALL @@ -11,27 +11,9 @@ GRUB depends on some software packages installed into your system. If @@ -59,7 +59,7 @@ * GNU Bison 2.3 or later * GNU gettext 0.17 or later diff --git a/include/grub/compiler.h b/include/grub/compiler.h -index c9e1d7a73..8f3be3ae7 100644 +index c9e1d7a73d..8f3be3ae70 100644 --- a/include/grub/compiler.h +++ b/include/grub/compiler.h @@ -48,4 +48,12 @@ @@ -77,7 +77,7 @@ #endif /* ! GRUB_COMPILER_HEADER */ diff --git a/include/grub/safemath.h b/include/grub/safemath.h new file mode 100644 -index 000000000..c17b89bba +index 0000000000..c17b89bba1 --- /dev/null +++ b/include/grub/safemath.h @@ -0,0 +1,37 @@ diff -Nru grub2-2.04/debian/patches/0083-calloc-Make-sure-we-always-have-an-overflow-checking.patch grub2-2.04/debian/patches/0083-calloc-Make-sure-we-always-have-an-overflow-checking.patch --- grub2-2.04/debian/patches/0083-calloc-Make-sure-we-always-have-an-overflow-checking.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0083-calloc-Make-sure-we-always-have-an-overflow-checking.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 5cffb625b814199eff98b73c34a92879b17fd5ac Mon Sep 17 00:00:00 2001 +From 20fe7d87ad8451f61b313e482be3422ded38a59e Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 15 Jun 2020 12:15:29 -0400 Subject: calloc: Make sure we always have an overflow-checking calloc() @@ -22,7 +22,7 @@ 7 files changed, 85 insertions(+), 3 deletions(-) diff --git a/grub-core/kern/emu/misc.c b/grub-core/kern/emu/misc.c -index 65db79baa..dfd8a8ec4 100644 +index 65db79baa1..dfd8a8ec48 100644 --- a/grub-core/kern/emu/misc.c +++ b/grub-core/kern/emu/misc.c @@ -85,6 +85,18 @@ grub_util_error (const char *fmt, ...) @@ -45,7 +45,7 @@ xmalloc (grub_size_t size) { diff --git a/grub-core/kern/emu/mm.c b/grub-core/kern/emu/mm.c -index f262e95e3..145b01d37 100644 +index f262e95e38..145b01d371 100644 --- a/grub-core/kern/emu/mm.c +++ b/grub-core/kern/emu/mm.c @@ -25,6 +25,16 @@ @@ -66,7 +66,7 @@ grub_malloc (grub_size_t size) { diff --git a/grub-core/kern/mm.c b/grub-core/kern/mm.c -index ee88ff611..f2822a836 100644 +index ee88ff6118..f2822a8364 100644 --- a/grub-core/kern/mm.c +++ b/grub-core/kern/mm.c @@ -67,8 +67,10 @@ @@ -133,7 +133,7 @@ grub_debug_malloc (const char *file, int line, grub_size_t size) { diff --git a/grub-core/lib/libgcrypt_wrap/mem.c b/grub-core/lib/libgcrypt_wrap/mem.c -index beeb661a3..74c6eafe5 100644 +index beeb661a3c..74c6eafe52 100644 --- a/grub-core/lib/libgcrypt_wrap/mem.c +++ b/grub-core/lib/libgcrypt_wrap/mem.c @@ -4,6 +4,7 @@ @@ -169,7 +169,7 @@ grub_fatal ("gcry_xcalloc failed"); return ret; diff --git a/grub-core/lib/posix_wrap/stdlib.h b/grub-core/lib/posix_wrap/stdlib.h -index 3b46f47ff..7a8d385e9 100644 +index 3b46f47ff5..7a8d385e97 100644 --- a/grub-core/lib/posix_wrap/stdlib.h +++ b/grub-core/lib/posix_wrap/stdlib.h @@ -21,6 +21,7 @@ @@ -195,7 +195,7 @@ static inline void * diff --git a/include/grub/emu/misc.h b/include/grub/emu/misc.h -index ce464cfd0..ff9c48a64 100644 +index ce464cfd00..ff9c48a649 100644 --- a/include/grub/emu/misc.h +++ b/include/grub/emu/misc.h @@ -47,6 +47,7 @@ grub_util_device_is_mapped (const char *dev); @@ -207,7 +207,7 @@ void * EXPORT_FUNC(xrealloc) (void *ptr, grub_size_t size) WARN_UNUSED_RESULT; char * EXPORT_FUNC(xstrdup) (const char *str) WARN_UNUSED_RESULT; diff --git a/include/grub/mm.h b/include/grub/mm.h -index 28e2e53eb..9c38dd3ca 100644 +index 28e2e53eb3..9c38dd3ca5 100644 --- a/include/grub/mm.h +++ b/include/grub/mm.h @@ -29,6 +29,7 @@ diff -Nru grub2-2.04/debian/patches/0084-calloc-Use-calloc-at-most-places.patch grub2-2.04/debian/patches/0084-calloc-Use-calloc-at-most-places.patch --- grub2-2.04/debian/patches/0084-calloc-Use-calloc-at-most-places.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0084-calloc-Use-calloc-at-most-places.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 855173c18eab34ad93f21f5c509fe0e91bfd1c44 Mon Sep 17 00:00:00 2001 +From 6f092afab244bc9e6e740be796e1ac3d07b33c33 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 15 Jun 2020 12:26:01 -0400 Subject: calloc: Use calloc() at most places @@ -111,7 +111,7 @@ 86 files changed, 176 insertions(+), 175 deletions(-) diff --git a/grub-core/bus/usb/usbhub.c b/grub-core/bus/usb/usbhub.c -index 34a7ff1b5..a06cce302 100644 +index 34a7ff1b5f..a06cce302d 100644 --- a/grub-core/bus/usb/usbhub.c +++ b/grub-core/bus/usb/usbhub.c @@ -149,8 +149,8 @@ grub_usb_add_hub (grub_usb_device_t dev) @@ -137,7 +137,7 @@ { grub_free (hub->devices); diff --git a/grub-core/commands/efi/lsefisystab.c b/grub-core/commands/efi/lsefisystab.c -index 902788250..d29188efa 100644 +index 902788250e..d29188efaf 100644 --- a/grub-core/commands/efi/lsefisystab.c +++ b/grub-core/commands/efi/lsefisystab.c @@ -73,7 +73,8 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)), @@ -151,7 +151,7 @@ return grub_errno; *grub_utf16_to_utf8 ((grub_uint8_t *) vendor, st->firmware_vendor, diff --git a/grub-core/commands/legacycfg.c b/grub-core/commands/legacycfg.c -index db7a8f002..5e3ec0d5e 100644 +index db7a8f0027..5e3ec0d5e4 100644 --- a/grub-core/commands/legacycfg.c +++ b/grub-core/commands/legacycfg.c @@ -314,7 +314,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)), @@ -182,7 +182,7 @@ return grub_errno; grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0])); diff --git a/grub-core/commands/menuentry.c b/grub-core/commands/menuentry.c -index 2c5363da7..9164df744 100644 +index 2c5363da7f..9164df744a 100644 --- a/grub-core/commands/menuentry.c +++ b/grub-core/commands/menuentry.c @@ -154,7 +154,7 @@ grub_normal_add_menu_entry (int argc, const char **args, @@ -195,7 +195,7 @@ goto fail; diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c -index 699447d11..7c8f97f6a 100644 +index 699447d11e..7c8f97f6ad 100644 --- a/grub-core/commands/nativedisk.c +++ b/grub-core/commands/nativedisk.c @@ -195,7 +195,7 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)), @@ -208,7 +208,7 @@ return grub_errno; diff --git a/grub-core/commands/parttool.c b/grub-core/commands/parttool.c -index 22b46b187..051e31320 100644 +index 22b46b1874..051e31320e 100644 --- a/grub-core/commands/parttool.c +++ b/grub-core/commands/parttool.c @@ -59,7 +59,13 @@ grub_parttool_register(const char *part_name, @@ -245,7 +245,7 @@ if (! parsed[j]) { diff --git a/grub-core/commands/regexp.c b/grub-core/commands/regexp.c -index f00b184c8..4019164f3 100644 +index f00b184c81..4019164f36 100644 --- a/grub-core/commands/regexp.c +++ b/grub-core/commands/regexp.c @@ -116,7 +116,7 @@ grub_cmd_regexp (grub_extcmd_context_t ctxt, int argc, char **args) @@ -258,7 +258,7 @@ goto fail; diff --git a/grub-core/commands/search_wrap.c b/grub-core/commands/search_wrap.c -index d7fd26b94..47fc8eb99 100644 +index d7fd26b940..47fc8eb996 100644 --- a/grub-core/commands/search_wrap.c +++ b/grub-core/commands/search_wrap.c @@ -122,7 +122,7 @@ grub_cmd_search (grub_extcmd_context_t ctxt, int argc, char **args) @@ -271,7 +271,7 @@ return grub_errno; j = 0; diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c -index c3b578acf..68ca9e0be 100644 +index c3b578acf2..68ca9e0be9 100644 --- a/grub-core/disk/diskfilter.c +++ b/grub-core/disk/diskfilter.c @@ -1134,7 +1134,7 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb, @@ -293,7 +293,7 @@ for (p = disk->partition; p; p = p->parent) pv->partmaps[s++] = xstrdup (p->partmap->name); diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c -index f73257e66..03674cb47 100644 +index f73257e66d..03674cb477 100644 --- a/grub-core/disk/ieee1275/ofdisk.c +++ b/grub-core/disk/ieee1275/ofdisk.c @@ -297,7 +297,7 @@ dev_iterate (const struct grub_ieee1275_devalias *alias) @@ -306,7 +306,7 @@ if (!table) { diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c -index 2a22d2d6c..e6323701a 100644 +index 2a22d2d6c1..e6323701ab 100644 --- a/grub-core/disk/ldm.c +++ b/grub-core/disk/ldm.c @@ -323,8 +323,8 @@ make_vg (grub_disk_t disk, @@ -352,7 +352,7 @@ return grub_errno; for (i = 0; i < *nsectors; i++) diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c -index 86c50c612..18b3a8bb1 100644 +index 86c50c6121..18b3a8bb1d 100644 --- a/grub-core/disk/luks.c +++ b/grub-core/disk/luks.c @@ -336,7 +336,7 @@ luks_recover_key (grub_disk_t source, @@ -365,7 +365,7 @@ return grub_errno; diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c -index 7b265c780..d1df640b3 100644 +index 7b265c780c..d1df640b31 100644 --- a/grub-core/disk/lvm.c +++ b/grub-core/disk/lvm.c @@ -173,7 +173,7 @@ grub_lvm_detect (grub_disk_t disk, @@ -398,7 +398,7 @@ p = grub_strstr (p, "stripes = ["); diff --git a/grub-core/disk/xen/xendisk.c b/grub-core/disk/xen/xendisk.c -index 48476cbbf..d6612eebd 100644 +index 48476cbbf9..d6612eebd7 100644 --- a/grub-core/disk/xen/xendisk.c +++ b/grub-core/disk/xen/xendisk.c @@ -426,7 +426,7 @@ grub_xendisk_init (void) @@ -411,7 +411,7 @@ return; if (grub_xenstore_dir ("device/vbd", fill, &ctr)) diff --git a/grub-core/efiemu/loadcore.c b/grub-core/efiemu/loadcore.c -index 44085ef81..2b924623f 100644 +index 44085ef818..2b924623f5 100644 --- a/grub-core/efiemu/loadcore.c +++ b/grub-core/efiemu/loadcore.c @@ -201,7 +201,7 @@ grub_efiemu_count_symbols (const Elf_Ehdr *e) @@ -424,7 +424,7 @@ /* Relocators */ for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff); diff --git a/grub-core/efiemu/mm.c b/grub-core/efiemu/mm.c -index 52a032f7b..9b8e0d0ad 100644 +index 52a032f7b2..9b8e0d0ad1 100644 --- a/grub-core/efiemu/mm.c +++ b/grub-core/efiemu/mm.c @@ -554,11 +554,11 @@ grub_efiemu_mmap_sort_and_uniq (void) @@ -451,7 +451,7 @@ { grub_efiemu_unload (); diff --git a/grub-core/font/font.c b/grub-core/font/font.c -index 85a292557..8e118b315 100644 +index 85a292557a..8e118b315c 100644 --- a/grub-core/font/font.c +++ b/grub-core/font/font.c @@ -293,8 +293,7 @@ load_font_index (grub_file_t file, grub_uint32_t sect_length, struct @@ -465,7 +465,7 @@ return 1; font->bmp_idx = grub_malloc (0x10000 * sizeof (grub_uint16_t)); diff --git a/grub-core/fs/affs.c b/grub-core/fs/affs.c -index 6b6a2bc91..220b3712f 100644 +index 6b6a2bc913..220b3712f2 100644 --- a/grub-core/fs/affs.c +++ b/grub-core/fs/affs.c @@ -301,7 +301,7 @@ grub_affs_read_symlink (grub_fshelp_node_t node) @@ -496,7 +496,7 @@ *grub_latin1_to_utf8 ((grub_uint8_t *) *label, file.name, len) = '\0'; } diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c -index 48bd3d04a..11272efc1 100644 +index 48bd3d04a5..11272efc1a 100644 --- a/grub-core/fs/btrfs.c +++ b/grub-core/fs/btrfs.c @@ -413,7 +413,7 @@ lower_bound (struct grub_btrfs_data *data, @@ -527,7 +527,7 @@ return grub_errno; for (i = 0; i < *nsectors; i++) diff --git a/grub-core/fs/hfs.c b/grub-core/fs/hfs.c -index ac0a40990..3fe842b4d 100644 +index ac0a40990e..3fe842b4d8 100644 --- a/grub-core/fs/hfs.c +++ b/grub-core/fs/hfs.c @@ -1360,7 +1360,7 @@ grub_hfs_label (grub_device_t device, char **label) @@ -540,7 +540,7 @@ macroman_to_utf8 (*label, data->sblock.volname + 1, len + 1, 0); diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c -index 54786bb1c..dae43becc 100644 +index 54786bb1c6..dae43becc9 100644 --- a/grub-core/fs/hfsplus.c +++ b/grub-core/fs/hfsplus.c @@ -720,7 +720,7 @@ list_nodes (void *record, void *hook_arg) @@ -571,7 +571,7 @@ { grub_free (label_name); diff --git a/grub-core/fs/iso9660.c b/grub-core/fs/iso9660.c -index 49c0c632b..4f1b52a55 100644 +index 49c0c632bf..4f1b52a552 100644 --- a/grub-core/fs/iso9660.c +++ b/grub-core/fs/iso9660.c @@ -331,7 +331,7 @@ grub_iso9660_convert_string (grub_uint8_t *us, int len) @@ -584,7 +584,7 @@ return NULL; diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c -index fc4e1f678..2f34f76da 100644 +index fc4e1f678d..2f34f76da8 100644 --- a/grub-core/fs/ntfs.c +++ b/grub-core/fs/ntfs.c @@ -556,8 +556,8 @@ get_utf8 (grub_uint8_t *in, grub_size_t len) @@ -599,7 +599,7 @@ { grub_free (buf); diff --git a/grub-core/fs/sfs.c b/grub-core/fs/sfs.c -index 50c1fe72f..90f7fb379 100644 +index 50c1fe72f4..90f7fb3791 100644 --- a/grub-core/fs/sfs.c +++ b/grub-core/fs/sfs.c @@ -266,7 +266,7 @@ grub_sfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock) @@ -612,7 +612,7 @@ { grub_errno = 0; diff --git a/grub-core/fs/tar.c b/grub-core/fs/tar.c -index 7d63e0c99..c551ed6b5 100644 +index 7d63e0c99c..c551ed6b52 100644 --- a/grub-core/fs/tar.c +++ b/grub-core/fs/tar.c @@ -120,7 +120,7 @@ grub_cpio_find_file (struct grub_archelp_data *data, char **name, @@ -625,7 +625,7 @@ return grub_errno; grub_free (data->linkname); diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c -index dc8b6e2d1..a83761674 100644 +index dc8b6e2d1c..a83761674a 100644 --- a/grub-core/fs/udf.c +++ b/grub-core/fs/udf.c @@ -873,7 +873,7 @@ read_string (const grub_uint8_t *raw, grub_size_t sz, char *outbuf) @@ -647,7 +647,7 @@ return NULL; for (i = 0; i < utf16len; i++) diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c -index 2f72e42bf..381dde556 100644 +index 2f72e42bf8..381dde556d 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -3325,7 +3325,7 @@ dnode_get_fullpath (const char *fullpath, struct subvolume *subvol, @@ -669,7 +669,7 @@ return grub_errno; for (i = 0; i < *nsectors; i++) diff --git a/grub-core/gfxmenu/gui_string_util.c b/grub-core/gfxmenu/gui_string_util.c -index a9a415e31..ba1e1eab3 100644 +index a9a415e312..ba1e1eab31 100644 --- a/grub-core/gfxmenu/gui_string_util.c +++ b/grub-core/gfxmenu/gui_string_util.c @@ -55,7 +55,7 @@ canonicalize_path (const char *path) @@ -682,7 +682,7 @@ return 0; diff --git a/grub-core/gfxmenu/widget-box.c b/grub-core/gfxmenu/widget-box.c -index b60602889..470597ded 100644 +index b606028891..470597ded2 100644 --- a/grub-core/gfxmenu/widget-box.c +++ b/grub-core/gfxmenu/widget-box.c @@ -303,10 +303,10 @@ grub_gfxmenu_create_box (const char *pixmaps_prefix, @@ -699,7 +699,7 @@ /* Initialize all pixmap pointers to NULL so that proper destruction can be performed if an error is encountered partway through construction. */ diff --git a/grub-core/io/gzio.c b/grub-core/io/gzio.c -index 6208a9763..43d98a7bd 100644 +index 6208a97636..43d98a7bdf 100644 --- a/grub-core/io/gzio.c +++ b/grub-core/io/gzio.c @@ -554,7 +554,7 @@ huft_build (unsigned *b, /* code lengths in bits (all assumed <= BMAX) */ @@ -712,7 +712,7 @@ { if (h) diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c -index 6e1ceb905..dc31caa21 100644 +index 6e1ceb9051..dc31caa213 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -202,7 +202,7 @@ grub_efi_set_variable(const char *var, const grub_efi_guid_t *guid, @@ -743,7 +743,7 @@ { grub_free (name); diff --git a/grub-core/kern/emu/hostdisk.c b/grub-core/kern/emu/hostdisk.c -index 8ac523953..f90b6c9ce 100644 +index 8ac5239538..f90b6c9ce4 100644 --- a/grub-core/kern/emu/hostdisk.c +++ b/grub-core/kern/emu/hostdisk.c @@ -627,7 +627,7 @@ static char * @@ -756,7 +756,7 @@ size_t i; int first = 1; diff --git a/grub-core/kern/fs.c b/grub-core/kern/fs.c -index 2b85f4950..f90be6566 100644 +index 2b85f4950b..f90be6566b 100644 --- a/grub-core/kern/fs.c +++ b/grub-core/kern/fs.c @@ -151,7 +151,7 @@ grub_fs_blocklist_open (grub_file_t file, const char *name) @@ -769,7 +769,7 @@ return 0; diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c -index 18cad5803..83c068d61 100644 +index 18cad5803b..83c068d61b 100644 --- a/grub-core/kern/misc.c +++ b/grub-core/kern/misc.c @@ -691,7 +691,7 @@ parse_printf_args (const char *fmt0, struct printf_args *args, @@ -782,7 +782,7 @@ { grub_errno = GRUB_ERR_NONE; diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c -index 78175aac2..619db3122 100644 +index 78175aac2d..619db3122a 100644 --- a/grub-core/kern/parser.c +++ b/grub-core/kern/parser.c @@ -213,7 +213,7 @@ grub_parser_split_cmdline (const char *cmdline, @@ -795,7 +795,7 @@ { grub_free (args); diff --git a/grub-core/kern/uboot/uboot.c b/grub-core/kern/uboot/uboot.c -index be4816fe6..aac8f9ae1 100644 +index be4816fe6f..aac8f9ae1f 100644 --- a/grub-core/kern/uboot/uboot.c +++ b/grub-core/kern/uboot/uboot.c @@ -133,7 +133,7 @@ grub_uboot_dev_enum (void) @@ -808,7 +808,7 @@ return 0; diff --git a/grub-core/lib/libgcrypt/cipher/ac.c b/grub-core/lib/libgcrypt/cipher/ac.c -index f5e946a2d..63f6fcd11 100644 +index f5e946a2d8..63f6fcd11e 100644 --- a/grub-core/lib/libgcrypt/cipher/ac.c +++ b/grub-core/lib/libgcrypt/cipher/ac.c @@ -185,7 +185,7 @@ ac_data_mpi_copy (gcry_ac_mpi_t *data_mpis, unsigned int data_mpis_n, @@ -848,7 +848,7 @@ { err = gcry_error_from_errno (errno); diff --git a/grub-core/lib/libgcrypt/cipher/primegen.c b/grub-core/lib/libgcrypt/cipher/primegen.c -index 2788e349f..b12e79b19 100644 +index 2788e349fa..b12e79b192 100644 --- a/grub-core/lib/libgcrypt/cipher/primegen.c +++ b/grub-core/lib/libgcrypt/cipher/primegen.c @@ -383,7 +383,7 @@ prime_generate_internal (int need_q_factor, @@ -870,7 +870,7 @@ val_2 = mpi_alloc_set_ui( 2 ); val_3 = mpi_alloc_set_ui( 3); diff --git a/grub-core/lib/libgcrypt/cipher/pubkey.c b/grub-core/lib/libgcrypt/cipher/pubkey.c -index 910982141..ca087ad75 100644 +index 910982141e..ca087ad75b 100644 --- a/grub-core/lib/libgcrypt/cipher/pubkey.c +++ b/grub-core/lib/libgcrypt/cipher/pubkey.c @@ -2941,7 +2941,7 @@ gcry_pk_encrypt (gcry_sexp_t *r_ciph, gcry_sexp_t s_data, gcry_sexp_t s_pkey) @@ -892,7 +892,7 @@ { rc = gpg_err_code_from_syserror (); diff --git a/grub-core/lib/priority_queue.c b/grub-core/lib/priority_queue.c -index 659be0b7f..7d5e7c05a 100644 +index 659be0b7f4..7d5e7c05aa 100644 --- a/grub-core/lib/priority_queue.c +++ b/grub-core/lib/priority_queue.c @@ -92,7 +92,7 @@ grub_priority_queue_new (grub_size_t elsize, @@ -905,7 +905,7 @@ return 0; ret = (struct grub_priority_queue *) grub_malloc (sizeof (*ret)); diff --git a/grub-core/lib/reed_solomon.c b/grub-core/lib/reed_solomon.c -index ee9fa7b4f..467305b46 100644 +index ee9fa7b4fe..467305b46a 100644 --- a/grub-core/lib/reed_solomon.c +++ b/grub-core/lib/reed_solomon.c @@ -20,6 +20,7 @@ @@ -931,7 +931,7 @@ /* Multiply with X - a^r */ for (j = 0; j < rs; j++) diff --git a/grub-core/lib/relocator.c b/grub-core/lib/relocator.c -index ea3ebc719..5847aac36 100644 +index ea3ebc719b..5847aac364 100644 --- a/grub-core/lib/relocator.c +++ b/grub-core/lib/relocator.c @@ -495,9 +495,9 @@ malloc_in_range (struct grub_relocator *rel, @@ -967,7 +967,7 @@ { grub_free (from); diff --git a/grub-core/lib/zstd/fse_decompress.c b/grub-core/lib/zstd/fse_decompress.c -index 72bbead5b..2227b84bc 100644 +index 72bbead5be..2227b84bc7 100644 --- a/grub-core/lib/zstd/fse_decompress.c +++ b/grub-core/lib/zstd/fse_decompress.c @@ -82,7 +82,7 @@ @@ -980,7 +980,7 @@ void FSE_freeDTable (FSE_DTable* dt) diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c -index 092e8e307..979d425df 100644 +index 092e8e3077..979d425dfb 100644 --- a/grub-core/loader/arm/linux.c +++ b/grub-core/loader/arm/linux.c @@ -82,7 +82,7 @@ linux_prepare_atag (void *target_atag) @@ -993,7 +993,7 @@ return grub_errno; diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c -index 04e815c05..b9a2df34b 100644 +index 04e815c052..b9a2df34b1 100644 --- a/grub-core/loader/efi/chainloader.c +++ b/grub-core/loader/efi/chainloader.c @@ -126,7 +126,7 @@ copy_file_path (grub_efi_file_path_device_path_t *fp, @@ -1006,7 +1006,7 @@ return; diff --git a/grub-core/loader/i386/bsdXX.c b/grub-core/loader/i386/bsdXX.c -index af6741d15..a8d8bf7da 100644 +index af6741d157..a8d8bf7dae 100644 --- a/grub-core/loader/i386/bsdXX.c +++ b/grub-core/loader/i386/bsdXX.c @@ -48,7 +48,7 @@ read_headers (grub_file_t file, const char *filename, Elf_Ehdr *e, char **shdr) @@ -1019,7 +1019,7 @@ return grub_errno; diff --git a/grub-core/loader/i386/xnu.c b/grub-core/loader/i386/xnu.c -index e64ed08f5..b7d176b5d 100644 +index e64ed08f58..b7d176b5d3 100644 --- a/grub-core/loader/i386/xnu.c +++ b/grub-core/loader/i386/xnu.c @@ -295,7 +295,7 @@ grub_xnu_devprop_add_property_utf8 (struct grub_xnu_devprop_device_descriptor *d @@ -1041,7 +1041,7 @@ return grub_errno; grub_memcpy (utf16, name, sizeof (grub_uint16_t) * namelen); diff --git a/grub-core/loader/macho.c b/grub-core/loader/macho.c -index 085f9c689..05710c48e 100644 +index 085f9c6890..05710c48e0 100644 --- a/grub-core/loader/macho.c +++ b/grub-core/loader/macho.c @@ -97,7 +97,7 @@ grub_macho_file (grub_file_t file, const char *filename, int is_64bit) @@ -1054,7 +1054,7 @@ goto fail; if (grub_file_read (macho->file, archs, diff --git a/grub-core/loader/multiboot_elfxx.c b/grub-core/loader/multiboot_elfxx.c -index 70cd1db51..cc6853692 100644 +index 70cd1db513..cc6853692a 100644 --- a/grub-core/loader/multiboot_elfxx.c +++ b/grub-core/loader/multiboot_elfxx.c @@ -217,7 +217,7 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld) @@ -1067,7 +1067,7 @@ return grub_errno; diff --git a/grub-core/loader/xnu.c b/grub-core/loader/xnu.c -index e0f47e72b..2f0ebd0b8 100644 +index e0f47e72b0..2f0ebd0b8b 100644 --- a/grub-core/loader/xnu.c +++ b/grub-core/loader/xnu.c @@ -801,7 +801,7 @@ grub_cmd_xnu_mkext (grub_command_t cmd __attribute__ ((unused)), @@ -1080,7 +1080,7 @@ { grub_file_close (file); diff --git a/grub-core/mmap/mmap.c b/grub-core/mmap/mmap.c -index 6a31cbae3..57b4e9a72 100644 +index 6a31cbae32..57b4e9a72a 100644 --- a/grub-core/mmap/mmap.c +++ b/grub-core/mmap/mmap.c @@ -143,9 +143,9 @@ grub_mmap_iterate (grub_memory_hook_t hook, void *hook_data) @@ -1096,7 +1096,7 @@ if (! ctx.scanline_events || !present) { diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c -index 558d97ba1..dd0ffcdae 100644 +index 558d97ba1e..dd0ffcdaea 100644 --- a/grub-core/net/bootp.c +++ b/grub-core/net/bootp.c @@ -1559,7 +1559,7 @@ grub_cmd_bootp (struct grub_command *cmd __attribute__ ((unused)), @@ -1109,7 +1109,7 @@ return grub_errno; diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c -index 5d9afe093..e332d5eb4 100644 +index 5d9afe093c..e332d5eb4a 100644 --- a/grub-core/net/dns.c +++ b/grub-core/net/dns.c @@ -285,8 +285,8 @@ recv_hook (grub_net_udp_socket_t sock __attribute__ ((unused)), @@ -1144,7 +1144,7 @@ return grub_errno; diff --git a/grub-core/net/net.c b/grub-core/net/net.c -index b917a75d5..fed7bc57c 100644 +index b917a75d54..fed7bc57cb 100644 --- a/grub-core/net/net.c +++ b/grub-core/net/net.c @@ -333,8 +333,8 @@ grub_cmd_ipv6_autoconf (struct grub_command *cmd __attribute__ ((unused)), @@ -1159,7 +1159,7 @@ { grub_free (ifaces); diff --git a/grub-core/normal/charset.c b/grub-core/normal/charset.c -index b0ab47d73..d57fb72fa 100644 +index b0ab47d73f..d57fb72faa 100644 --- a/grub-core/normal/charset.c +++ b/grub-core/normal/charset.c @@ -203,7 +203,7 @@ grub_utf8_to_ucs4_alloc (const char *msg, grub_uint32_t **unicode_msg, @@ -1201,7 +1201,7 @@ return -1; for (ptr = logical; ptr <= logical + logical_len; ptr++) diff --git a/grub-core/normal/cmdline.c b/grub-core/normal/cmdline.c -index c037d5050..c57242e2e 100644 +index c037d5050e..c57242e2ea 100644 --- a/grub-core/normal/cmdline.c +++ b/grub-core/normal/cmdline.c @@ -41,7 +41,7 @@ grub_err_t @@ -1268,7 +1268,7 @@ { grub_print_error (); diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c -index cdf3590a3..1993995be 100644 +index cdf3590a36..1993995be6 100644 --- a/grub-core/normal/menu_entry.c +++ b/grub-core/normal/menu_entry.c @@ -95,8 +95,8 @@ init_line (struct screen *screen, struct line *linep) @@ -1328,7 +1328,7 @@ { grub_print_error (); diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c -index e22bb91f6..18240e76c 100644 +index e22bb91f6e..18240e76ce 100644 --- a/grub-core/normal/menu_text.c +++ b/grub-core/normal/menu_text.c @@ -78,7 +78,7 @@ grub_print_message_indented_real (const char *msg, int margin_left, @@ -1350,7 +1350,7 @@ /* XXX How to show this error? */ return; diff --git a/grub-core/normal/term.c b/grub-core/normal/term.c -index a1e5c5a0d..cc8c173b6 100644 +index a1e5c5a0da..cc8c173b6e 100644 --- a/grub-core/normal/term.c +++ b/grub-core/normal/term.c @@ -264,7 +264,7 @@ grub_term_save_pos (void) @@ -1372,7 +1372,7 @@ grub_error_pop (); diff --git a/grub-core/osdep/linux/getroot.c b/grub-core/osdep/linux/getroot.c -index 7adc0f30e..a5bd0752f 100644 +index 7adc0f30ee..a5bd0752fb 100644 --- a/grub-core/osdep/linux/getroot.c +++ b/grub-core/osdep/linux/getroot.c @@ -168,7 +168,7 @@ grub_util_raid_getmembers (const char *name, int bootable) @@ -1403,7 +1403,7 @@ again: fp = grub_util_fopen ("/proc/self/mountinfo", "r"); diff --git a/grub-core/osdep/unix/config.c b/grub-core/osdep/unix/config.c -index 5478030fd..89dc70d93 100644 +index 5478030fde..89dc70d93c 100644 --- a/grub-core/osdep/unix/config.c +++ b/grub-core/osdep/unix/config.c @@ -130,7 +130,7 @@ grub_util_load_config (struct grub_util_config *cfg) @@ -1416,7 +1416,7 @@ if (grub_util_is_regular (cfgfile)) sorted_cfgpaths[i++] = xstrdup (cfgfile); diff --git a/grub-core/osdep/windows/getroot.c b/grub-core/osdep/windows/getroot.c -index 661d95461..eada663b2 100644 +index 661d954619..eada663b26 100644 --- a/grub-core/osdep/windows/getroot.c +++ b/grub-core/osdep/windows/getroot.c @@ -59,7 +59,7 @@ grub_get_mount_point (const TCHAR *path) @@ -1429,7 +1429,7 @@ /* When pointing to EFI system partition GetVolumePathName fails for ESP root and returns abberant information for everything diff --git a/grub-core/osdep/windows/hostdisk.c b/grub-core/osdep/windows/hostdisk.c -index 355100789..0be327394 100644 +index 355100789a..0be3273949 100644 --- a/grub-core/osdep/windows/hostdisk.c +++ b/grub-core/osdep/windows/hostdisk.c @@ -111,7 +111,7 @@ grub_util_get_windows_path_real (const char *path) @@ -1451,7 +1451,7 @@ pattern[l] = '\\'; pattern[l + 1] = '*'; diff --git a/grub-core/osdep/windows/init.c b/grub-core/osdep/windows/init.c -index e8ffd62c6..6297de632 100644 +index e8ffd62c6a..6297de6326 100644 --- a/grub-core/osdep/windows/init.c +++ b/grub-core/osdep/windows/init.c @@ -161,7 +161,7 @@ grub_util_host_init (int *argc __attribute__ ((unused)), @@ -1464,7 +1464,7 @@ for (i = 0; i < *argc; i++) (*argv)[i] = grub_util_tchar_to_utf8 (targv[i]); diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c -index a3f738fb9..b160949d8 100644 +index a3f738fb9b..b160949d8e 100644 --- a/grub-core/osdep/windows/platform.c +++ b/grub-core/osdep/windows/platform.c @@ -231,8 +231,8 @@ grub_install_register_efi (grub_device_t efidir_grub_dev, const char *efidir, @@ -1479,7 +1479,7 @@ (const grub_uint8_t *) efi_distributor, distrib8_len, 0); diff --git a/grub-core/osdep/windows/relpath.c b/grub-core/osdep/windows/relpath.c -index cb0861744..478e8ef14 100644 +index cb0861744a..478e8ef14d 100644 --- a/grub-core/osdep/windows/relpath.c +++ b/grub-core/osdep/windows/relpath.c @@ -72,7 +72,7 @@ grub_make_system_path_relative_to_its_root (const char *path) @@ -1492,7 +1492,7 @@ && dirwindows[offset] != '/' && dirwindows[offset]) diff --git a/grub-core/partmap/gpt.c b/grub-core/partmap/gpt.c -index 103f6796f..72a2e37cd 100644 +index 103f6796f3..72a2e37cd4 100644 --- a/grub-core/partmap/gpt.c +++ b/grub-core/partmap/gpt.c @@ -199,7 +199,7 @@ gpt_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors, @@ -1505,7 +1505,7 @@ return grub_errno; for (i = 0; i < *nsectors; i++) diff --git a/grub-core/partmap/msdos.c b/grub-core/partmap/msdos.c -index 7b8e45076..ee3f24982 100644 +index 7b8e450762..ee3f24982b 100644 --- a/grub-core/partmap/msdos.c +++ b/grub-core/partmap/msdos.c @@ -337,7 +337,7 @@ pc_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors, @@ -1518,7 +1518,7 @@ return grub_errno; for (i = 0; i < *nsectors; i++) diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c -index ee299fd0e..c8d6806fe 100644 +index ee299fd0ea..c8d6806fe0 100644 --- a/grub-core/script/execute.c +++ b/grub-core/script/execute.c @@ -553,7 +553,7 @@ gettext_append (struct grub_script_argv *result, const char *orig_str) @@ -1531,7 +1531,7 @@ if (parse_string (orig_str, gettext_save_allow, &ctx, 0)) goto fail; diff --git a/grub-core/tests/fake_input.c b/grub-core/tests/fake_input.c -index 2d6085298..b5eb516be 100644 +index 2d60852989..b5eb516be2 100644 --- a/grub-core/tests/fake_input.c +++ b/grub-core/tests/fake_input.c @@ -49,7 +49,7 @@ grub_terminal_input_fake_sequence (int *seq_in, int nseq_in) @@ -1544,7 +1544,7 @@ return; diff --git a/grub-core/tests/video_checksum.c b/grub-core/tests/video_checksum.c -index 74d5b65e5..44d081069 100644 +index 74d5b65e5c..44d0810698 100644 --- a/grub-core/tests/video_checksum.c +++ b/grub-core/tests/video_checksum.c @@ -336,7 +336,7 @@ grub_video_capture_write_bmp (const char *fname, @@ -1575,7 +1575,7 @@ grub_uint16_t gmask = ((1 << mode_info->green_mask_size) - 1); grub_uint16_t bmask = ((1 << mode_info->blue_mask_size) - 1); diff --git a/grub-core/video/capture.c b/grub-core/video/capture.c -index 4f83c7441..4d3195e01 100644 +index 4f83c74411..4d3195e017 100644 --- a/grub-core/video/capture.c +++ b/grub-core/video/capture.c @@ -89,7 +89,7 @@ grub_video_capture_start (const struct grub_video_mode_info *mode_info, @@ -1588,7 +1588,7 @@ return grub_errno; diff --git a/grub-core/video/emu/sdl.c b/grub-core/video/emu/sdl.c -index a2f639f66..0ebab6f57 100644 +index a2f639f66d..0ebab6f57d 100644 --- a/grub-core/video/emu/sdl.c +++ b/grub-core/video/emu/sdl.c @@ -172,7 +172,7 @@ grub_video_sdl_set_palette (unsigned int start, unsigned int count, @@ -1601,7 +1601,7 @@ { tmp[i].r = palette_data[i].r; diff --git a/grub-core/video/i386/pc/vga.c b/grub-core/video/i386/pc/vga.c -index 01f47112d..b2f776c99 100644 +index 01f47112d3..b2f776c997 100644 --- a/grub-core/video/i386/pc/vga.c +++ b/grub-core/video/i386/pc/vga.c @@ -127,7 +127,7 @@ grub_video_vga_setup (unsigned int width, unsigned int height, @@ -1614,7 +1614,7 @@ framebuffer.back_page = 0; if (!framebuffer.temporary_buffer) diff --git a/grub-core/video/readers/png.c b/grub-core/video/readers/png.c -index 777e71334..61bd64537 100644 +index 777e71334c..61bd645379 100644 --- a/grub-core/video/readers/png.c +++ b/grub-core/video/readers/png.c @@ -309,7 +309,7 @@ grub_png_decode_image_header (struct grub_png_data *data) @@ -1627,7 +1627,7 @@ return grub_errno; diff --git a/include/grub/unicode.h b/include/grub/unicode.h -index a0403e91f..4de986a85 100644 +index a0403e91f9..4de986a857 100644 --- a/include/grub/unicode.h +++ b/include/grub/unicode.h @@ -293,7 +293,7 @@ grub_unicode_glyph_dup (const struct grub_unicode_glyph *in) @@ -1649,7 +1649,7 @@ return; grub_memcpy (out->combining_ptr, in->combining_ptr, diff --git a/util/getroot.c b/util/getroot.c -index cdd41153c..6ae35ecaa 100644 +index cdd41153c5..6ae35ecaa6 100644 --- a/util/getroot.c +++ b/util/getroot.c @@ -200,7 +200,7 @@ make_device_name (const char *drive) @@ -1662,7 +1662,7 @@ for (iptr = drive; *iptr; iptr++) { diff --git a/util/grub-file.c b/util/grub-file.c -index 50c18b683..b2e7dd69f 100644 +index 50c18b6835..b2e7dd69f4 100644 --- a/util/grub-file.c +++ b/util/grub-file.c @@ -54,7 +54,7 @@ main (int argc, char *argv[]) @@ -1675,7 +1675,7 @@ if (argc == 2 && strcmp (argv[1], "--version") == 0) { diff --git a/util/grub-fstest.c b/util/grub-fstest.c -index f14e02d97..57246af7c 100644 +index f14e02d972..57246af7c6 100644 --- a/util/grub-fstest.c +++ b/util/grub-fstest.c @@ -650,7 +650,7 @@ argp_parser (int key, char *arg, struct argp_state *state) @@ -1697,7 +1697,7 @@ argp_parse (&argp, argc, argv, 0, 0, 0); diff --git a/util/grub-install-common.c b/util/grub-install-common.c -index fdfe2c7ea..447504d3f 100644 +index fdfe2c7ead..447504d3f4 100644 --- a/util/grub-install-common.c +++ b/util/grub-install-common.c @@ -286,7 +286,7 @@ handle_install_list (struct install_list *il, const char *val, @@ -1710,7 +1710,7 @@ for (ce = il->entries; ; ce++) { diff --git a/util/grub-install.c b/util/grub-install.c -index f408b1986..843dfc7c8 100644 +index f408b19860..843dfc7c80 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -658,7 +658,7 @@ device_map_check_duplicates (const char *dev_map) @@ -1732,7 +1732,7 @@ for (curdev = grub_devices, curdrive = grub_drives; *curdev; curdev++, curdrive++) diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c -index bc087c2b5..d97d0e7be 100644 +index bc087c2b57..d97d0e7bef 100644 --- a/util/grub-mkimagexx.c +++ b/util/grub-mkimagexx.c @@ -2294,10 +2294,8 @@ SUFFIX (grub_mkimage_load_image) (const char *kernel_path, @@ -1749,7 +1749,7 @@ SUFFIX (locate_sections) (e, kernel_path, &smd, layout, image_target); diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c -index 45d6140d3..cb972f120 100644 +index 45d6140d3e..cb972f120b 100644 --- a/util/grub-mkrescue.c +++ b/util/grub-mkrescue.c @@ -441,8 +441,8 @@ main (int argc, char *argv[]) @@ -1764,7 +1764,7 @@ xorriso_tail_argc = 0; /* Program name */ diff --git a/util/grub-mkstandalone.c b/util/grub-mkstandalone.c -index 4907d44c0..edf309717 100644 +index 4907d44c0b..edf309717c 100644 --- a/util/grub-mkstandalone.c +++ b/util/grub-mkstandalone.c @@ -296,7 +296,7 @@ main (int argc, char *argv[]) @@ -1777,7 +1777,7 @@ argp_parse (&argp, argc, argv, 0, 0, 0); diff --git a/util/grub-pe2elf.c b/util/grub-pe2elf.c -index 0d4084a10..11331294f 100644 +index 0d4084a108..11331294f1 100644 --- a/util/grub-pe2elf.c +++ b/util/grub-pe2elf.c @@ -100,9 +100,9 @@ write_section_data (FILE* fp, const char *name, char *image, @@ -1817,7 +1817,7 @@ for (i = 0; i < (int) pe_chdr->num_symbols; i += pe_symtab->num_aux + 1, pe_symtab += pe_symtab->num_aux + 1) diff --git a/util/grub-probe.c b/util/grub-probe.c -index 81d27eead..cbe6ed94c 100644 +index 81d27eead5..cbe6ed94ca 100644 --- a/util/grub-probe.c +++ b/util/grub-probe.c @@ -361,8 +361,8 @@ probe (const char *path, char **device_names, char delim) diff -Nru grub2-2.04/debian/patches/0085-malloc-Use-overflow-checking-primitives-where-we-do-.patch grub2-2.04/debian/patches/0085-malloc-Use-overflow-checking-primitives-where-we-do-.patch --- grub2-2.04/debian/patches/0085-malloc-Use-overflow-checking-primitives-where-we-do-.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0085-malloc-Use-overflow-checking-primitives-where-we-do-.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 83e59f56362e11618083f376cbf700861d6b8f2a Mon Sep 17 00:00:00 2001 +From e8a7a657ccd805880182e0906dc1e3db6abbf01f Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 15 Jun 2020 12:28:27 -0400 Subject: malloc: Use overflow checking primitives where we do complex @@ -55,7 +55,7 @@ 23 files changed, 382 insertions(+), 113 deletions(-) diff --git a/grub-core/commands/legacycfg.c b/grub-core/commands/legacycfg.c -index 5e3ec0d5e..cc5971f4d 100644 +index 5e3ec0d5e4..cc5971f4db 100644 --- a/grub-core/commands/legacycfg.c +++ b/grub-core/commands/legacycfg.c @@ -32,6 +32,7 @@ @@ -118,7 +118,7 @@ grub_free (suffix); return grub_errno; diff --git a/grub-core/commands/wildcard.c b/grub-core/commands/wildcard.c -index 4a106ca04..cc3290311 100644 +index 4a106ca040..cc3290311f 100644 --- a/grub-core/commands/wildcard.c +++ b/grub-core/commands/wildcard.c @@ -23,6 +23,7 @@ @@ -220,7 +220,7 @@ return 1; } diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c -index e6323701a..58f8a53e1 100644 +index e6323701ab..58f8a53e1a 100644 --- a/grub-core/disk/ldm.c +++ b/grub-core/disk/ldm.c @@ -25,6 +25,7 @@ @@ -291,7 +291,7 @@ goto fail2; comp->segments = t; diff --git a/grub-core/font/font.c b/grub-core/font/font.c -index 8e118b315..5edb477ac 100644 +index 8e118b315c..5edb477ac2 100644 --- a/grub-core/font/font.c +++ b/grub-core/font/font.c @@ -30,6 +30,7 @@ @@ -318,7 +318,7 @@ return 0; diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c -index 11272efc1..2b65bd56a 100644 +index 11272efc1a..2b65bd56a0 100644 --- a/grub-core/fs/btrfs.c +++ b/grub-core/fs/btrfs.c @@ -40,6 +40,7 @@ @@ -375,7 +375,7 @@ } } diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c -index 9b389802a..ac33bcd68 100644 +index 9b389802a3..ac33bcd68c 100644 --- a/grub-core/fs/ext2.c +++ b/grub-core/fs/ext2.c @@ -46,6 +46,7 @@ @@ -410,7 +410,7 @@ return 0; diff --git a/grub-core/fs/iso9660.c b/grub-core/fs/iso9660.c -index 4f1b52a55..7ba5b300b 100644 +index 4f1b52a552..7ba5b300bc 100644 --- a/grub-core/fs/iso9660.c +++ b/grub-core/fs/iso9660.c @@ -28,6 +28,7 @@ @@ -514,7 +514,7 @@ grub_free (ctx.filename); grub_free (node); diff --git a/grub-core/fs/sfs.c b/grub-core/fs/sfs.c -index 90f7fb379..de2b107a4 100644 +index 90f7fb3791..de2b107a4a 100644 --- a/grub-core/fs/sfs.c +++ b/grub-core/fs/sfs.c @@ -26,6 +26,7 @@ @@ -578,7 +578,7 @@ *grub_latin1_to_utf8 ((grub_uint8_t *) *label, (const grub_uint8_t *) data->label, diff --git a/grub-core/fs/squash4.c b/grub-core/fs/squash4.c -index 95d5c1e1f..785123894 100644 +index 95d5c1e1ff..785123894e 100644 --- a/grub-core/fs/squash4.c +++ b/grub-core/fs/squash4.c @@ -26,6 +26,7 @@ @@ -677,7 +677,7 @@ node->ino = ino; node->stack[node->stsize].ino_chunk = grub_le_to_cpu32 (dh.ino_chunk); diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c -index a83761674..21ac7f446 100644 +index a83761674a..21ac7f4460 100644 --- a/grub-core/fs/udf.c +++ b/grub-core/fs/udf.c @@ -28,6 +28,7 @@ @@ -786,7 +786,7 @@ grub_free (out); grub_error (GRUB_ERR_BAD_FS, "invalid symlink"); diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c -index 96ffecbfc..ea6590290 100644 +index 96ffecbfc9..ea6590290b 100644 --- a/grub-core/fs/xfs.c +++ b/grub-core/fs/xfs.c @@ -25,6 +25,7 @@ @@ -822,7 +822,7 @@ if (! data) goto fail; diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c -index 381dde556..36d0373a6 100644 +index 381dde556d..36d0373a6a 100644 --- a/grub-core/fs/zfs/zfs.c +++ b/grub-core/fs/zfs/zfs.c @@ -55,6 +55,7 @@ @@ -875,7 +875,7 @@ return 0; grub_memcpy (ret, nvlist, sizeof (grub_uint32_t)); diff --git a/grub-core/fs/zfs/zfscrypt.c b/grub-core/fs/zfs/zfscrypt.c -index 1402e0bc2..de3b015f5 100644 +index 1402e0bc29..de3b015f58 100644 --- a/grub-core/fs/zfs/zfscrypt.c +++ b/grub-core/fs/zfs/zfscrypt.c @@ -22,6 +22,7 @@ @@ -902,7 +902,7 @@ return grub_errno; key->is_passphrase = passphrase; diff --git a/grub-core/lib/arg.c b/grub-core/lib/arg.c -index fd7744a6f..3288609a5 100644 +index fd7744a6ff..3288609a5e 100644 --- a/grub-core/lib/arg.c +++ b/grub-core/lib/arg.c @@ -23,6 +23,7 @@ @@ -954,7 +954,7 @@ return 0; diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c -index 5b9b92d6b..ef0d63afc 100644 +index 5b9b92d6ba..ef0d63afc8 100644 --- a/grub-core/loader/i386/bsd.c +++ b/grub-core/loader/i386/bsd.c @@ -35,6 +35,7 @@ @@ -984,7 +984,7 @@ return grub_errno; diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c -index e332d5eb4..906ec7d67 100644 +index e332d5eb4a..906ec7d678 100644 --- a/grub-core/net/dns.c +++ b/grub-core/net/dns.c @@ -22,6 +22,7 @@ @@ -1013,7 +1013,7 @@ return grub_errno; dns_servers_alloc = na; diff --git a/grub-core/normal/charset.c b/grub-core/normal/charset.c -index d57fb72fa..4dfcc3107 100644 +index d57fb72faa..4dfcc31078 100644 --- a/grub-core/normal/charset.c +++ b/grub-core/normal/charset.c @@ -48,6 +48,7 @@ @@ -1050,7 +1050,7 @@ continue; } diff --git a/grub-core/normal/cmdline.c b/grub-core/normal/cmdline.c -index c57242e2e..de03fe63b 100644 +index c57242e2ea..de03fe63b3 100644 --- a/grub-core/normal/cmdline.c +++ b/grub-core/normal/cmdline.c @@ -28,6 +28,7 @@ @@ -1086,7 +1086,7 @@ grub_errno = GRUB_ERR_NONE; (*max_len) /= 2; diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c -index 1993995be..50eef918c 100644 +index 1993995be6..50eef918cf 100644 --- a/grub-core/normal/menu_entry.c +++ b/grub-core/normal/menu_entry.c @@ -27,6 +27,7 @@ @@ -1119,7 +1119,7 @@ return 1; diff --git a/grub-core/script/argv.c b/grub-core/script/argv.c -index 217ec5d1e..5751fdd57 100644 +index 217ec5d1e1..5751fdd570 100644 --- a/grub-core/script/argv.c +++ b/grub-core/script/argv.c @@ -20,6 +20,7 @@ @@ -1170,7 +1170,7 @@ return 1; diff --git a/grub-core/script/lexer.c b/grub-core/script/lexer.c -index c6bd3172f..5fb0cbd0b 100644 +index c6bd3172fa..5fb0cbd0bc 100644 --- a/grub-core/script/lexer.c +++ b/grub-core/script/lexer.c @@ -24,6 +24,7 @@ @@ -1231,7 +1231,7 @@ } diff --git a/grub-core/video/bitmap.c b/grub-core/video/bitmap.c -index b2e031566..6256e209a 100644 +index b2e0315665..6256e209a6 100644 --- a/grub-core/video/bitmap.c +++ b/grub-core/video/bitmap.c @@ -23,6 +23,7 @@ @@ -1286,7 +1286,7 @@ /* Frees all resources allocated by bitmap. */ diff --git a/grub-core/video/readers/png.c b/grub-core/video/readers/png.c -index 61bd64537..0157ff742 100644 +index 61bd645379..0157ff7420 100644 --- a/grub-core/video/readers/png.c +++ b/grub-core/video/readers/png.c @@ -23,6 +23,7 @@ diff -Nru grub2-2.04/debian/patches/0086-iso9660-Don-t-leak-memory-on-realloc-failures.patch grub2-2.04/debian/patches/0086-iso9660-Don-t-leak-memory-on-realloc-failures.patch --- grub2-2.04/debian/patches/0086-iso9660-Don-t-leak-memory-on-realloc-failures.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0086-iso9660-Don-t-leak-memory-on-realloc-failures.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 3daaf33550e0fc35de5a51de337e7d5e4bd1bbfd Mon Sep 17 00:00:00 2001 +From 5ee32ec2cad926af30576a4231c124dca00fce0b Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Sat, 4 Jul 2020 12:25:09 -0400 Subject: iso9660: Don't leak memory on realloc() failures @@ -10,7 +10,7 @@ 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/grub-core/fs/iso9660.c b/grub-core/fs/iso9660.c -index 7ba5b300b..5ec4433b8 100644 +index 7ba5b300bc..5ec4433b8f 100644 --- a/grub-core/fs/iso9660.c +++ b/grub-core/fs/iso9660.c @@ -533,14 +533,20 @@ add_part (struct iterate_dir_ctx *ctx, diff -Nru grub2-2.04/debian/patches/0087-font-Do-not-load-more-than-one-NAME-section.patch grub2-2.04/debian/patches/0087-font-Do-not-load-more-than-one-NAME-section.patch --- grub2-2.04/debian/patches/0087-font-Do-not-load-more-than-one-NAME-section.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0087-font-Do-not-load-more-than-one-NAME-section.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From b762411ec388017c77379629298e90f93dec75d7 Mon Sep 17 00:00:00 2001 +From b3ac537cadce863da5f47ca8da555b827430a097 Mon Sep 17 00:00:00 2001 From: Daniel Kiper Date: Tue, 7 Jul 2020 15:36:26 +0200 Subject: font: Do not load more than one NAME section @@ -16,7 +16,7 @@ 1 file changed, 6 insertions(+) diff --git a/grub-core/font/font.c b/grub-core/font/font.c -index 5edb477ac..d09bb38d8 100644 +index 5edb477ac2..d09bb38d89 100644 --- a/grub-core/font/font.c +++ b/grub-core/font/font.c @@ -532,6 +532,12 @@ grub_font_load (const char *filename) diff -Nru grub2-2.04/debian/patches/0088-gfxmenu-Fix-double-free-in-load_image.patch grub2-2.04/debian/patches/0088-gfxmenu-Fix-double-free-in-load_image.patch --- grub2-2.04/debian/patches/0088-gfxmenu-Fix-double-free-in-load_image.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0088-gfxmenu-Fix-double-free-in-load_image.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 58e72a15fa61adffe8015da0eb093d2e93380ee0 Mon Sep 17 00:00:00 2001 +From 118abbf4a05324e0ab81f8508fcfa35e20e52d2f Mon Sep 17 00:00:00 2001 From: Alexey Makhalov Date: Wed, 8 Jul 2020 20:41:56 +0000 Subject: gfxmenu: Fix double free in load_image() @@ -15,7 +15,7 @@ 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/grub-core/gfxmenu/gui_image.c b/grub-core/gfxmenu/gui_image.c -index 29784ed2d..6b2e976f1 100644 +index 29784ed2d9..6b2e976f16 100644 --- a/grub-core/gfxmenu/gui_image.c +++ b/grub-core/gfxmenu/gui_image.c @@ -195,7 +195,10 @@ load_image (grub_gui_image_t self, const char *path) diff -Nru grub2-2.04/debian/patches/0089-lzma-Make-sure-we-don-t-dereference-past-array.patch grub2-2.04/debian/patches/0089-lzma-Make-sure-we-don-t-dereference-past-array.patch --- grub2-2.04/debian/patches/0089-lzma-Make-sure-we-don-t-dereference-past-array.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0089-lzma-Make-sure-we-don-t-dereference-past-array.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From d6f176758a8d2ab9cd81646e7e2e825682a0fdfe Mon Sep 17 00:00:00 2001 +From d073dea9efca076e20f0a3ec50b3c2bdd68758ca Mon Sep 17 00:00:00 2001 From: Konrad Rzeszutek Wilk Date: Thu, 9 Jul 2020 03:05:23 +0000 Subject: lzma: Make sure we don't dereference past array @@ -21,7 +21,7 @@ 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/grub-core/lib/LzmaEnc.c b/grub-core/lib/LzmaEnc.c -index f2ec04a8c..753e56a95 100644 +index f2ec04a8c2..753e56a95e 100644 --- a/grub-core/lib/LzmaEnc.c +++ b/grub-core/lib/LzmaEnc.c @@ -1877,13 +1877,19 @@ static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, Bool useLimits, UInt32 maxPackSize diff -Nru grub2-2.04/debian/patches/0090-tftp-Do-not-use-priority-queue.patch grub2-2.04/debian/patches/0090-tftp-Do-not-use-priority-queue.patch --- grub2-2.04/debian/patches/0090-tftp-Do-not-use-priority-queue.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0090-tftp-Do-not-use-priority-queue.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From c68bccd83bec72174cfbfb258e7329adb309879d Mon Sep 17 00:00:00 2001 +From 1c063bcd1585bc008c7ceb3183abf1a4c3fba935 Mon Sep 17 00:00:00 2001 From: Alexey Makhalov Date: Thu, 9 Jul 2020 08:10:40 +0000 Subject: tftp: Do not use priority queue @@ -34,7 +34,7 @@ 1 file changed, 53 insertions(+), 118 deletions(-) diff --git a/grub-core/net/tftp.c b/grub-core/net/tftp.c -index a0817a075..e6566fa17 100644 +index a0817a075d..e6566fa176 100644 --- a/grub-core/net/tftp.c +++ b/grub-core/net/tftp.c @@ -25,7 +25,6 @@ diff -Nru grub2-2.04/debian/patches/0091-script-Remove-unused-fields-from-grub_script_functio.patch grub2-2.04/debian/patches/0091-script-Remove-unused-fields-from-grub_script_functio.patch --- grub2-2.04/debian/patches/0091-script-Remove-unused-fields-from-grub_script_functio.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0091-script-Remove-unused-fields-from-grub_script_functio.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From fd60c9a66288bf80f4da18e9832436bf2e6c1e65 Mon Sep 17 00:00:00 2001 +From 6dbb88f1086e59a5a0e0650826b74a01d784baec Mon Sep 17 00:00:00 2001 From: Chris Coulson Date: Fri, 10 Jul 2020 11:21:14 +0100 Subject: script: Remove unused fields from grub_script_function struct @@ -10,7 +10,7 @@ 1 file changed, 5 deletions(-) diff --git a/include/grub/script_sh.h b/include/grub/script_sh.h -index 360c2be1f..b382bcf09 100644 +index 360c2be1f0..b382bcf09b 100644 --- a/include/grub/script_sh.h +++ b/include/grub/script_sh.h @@ -359,13 +359,8 @@ struct grub_script_function diff -Nru grub2-2.04/debian/patches/0092-script-Avoid-a-use-after-free-when-redefining-a-func.patch grub2-2.04/debian/patches/0092-script-Avoid-a-use-after-free-when-redefining-a-func.patch --- grub2-2.04/debian/patches/0092-script-Avoid-a-use-after-free-when-redefining-a-func.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0092-script-Avoid-a-use-after-free-when-redefining-a-func.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From ce9f66f0a86e6cbfd866e431df87f205537380f5 Mon Sep 17 00:00:00 2001 +From 87ca334a7a3cd8189affc37d62851dffb4f4af5f Mon Sep 17 00:00:00 2001 From: Chris Coulson Date: Fri, 10 Jul 2020 14:41:45 +0100 Subject: script: Avoid a use-after-free when redefining a function during @@ -27,7 +27,7 @@ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c -index c8d6806fe..7e028e135 100644 +index c8d6806fe0..7e028e1355 100644 --- a/grub-core/script/execute.c +++ b/grub-core/script/execute.c @@ -838,7 +838,9 @@ grub_script_function_call (grub_script_function_t func, int argc, char **args) @@ -41,7 +41,7 @@ function_return = 0; active_loops = loops; diff --git a/grub-core/script/function.c b/grub-core/script/function.c -index d36655e51..3aad04bf9 100644 +index d36655e510..3aad04bf9d 100644 --- a/grub-core/script/function.c +++ b/grub-core/script/function.c @@ -34,6 +34,7 @@ grub_script_function_create (struct grub_script_arg *functionname_arg, @@ -76,7 +76,7 @@ else { diff --git a/grub-core/script/parser.y b/grub-core/script/parser.y -index 4f0ab8319..f80b86b6f 100644 +index 4f0ab8319e..f80b86b6f1 100644 --- a/grub-core/script/parser.y +++ b/grub-core/script/parser.y @@ -289,7 +289,8 @@ function: "function" "name" @@ -90,7 +90,7 @@ state->scripts = $3; diff --git a/include/grub/script_sh.h b/include/grub/script_sh.h -index b382bcf09..6c48e0751 100644 +index b382bcf09b..6c48e07512 100644 --- a/include/grub/script_sh.h +++ b/include/grub/script_sh.h @@ -361,6 +361,8 @@ struct grub_script_function diff -Nru grub2-2.04/debian/patches/0093-hfsplus-fix-two-more-overflows.patch grub2-2.04/debian/patches/0093-hfsplus-fix-two-more-overflows.patch --- grub2-2.04/debian/patches/0093-hfsplus-fix-two-more-overflows.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0093-hfsplus-fix-two-more-overflows.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 4be2c61fdd94238b4e529f018eddea12f6ba5361 Mon Sep 17 00:00:00 2001 +From 0edb485feec47c243d20b85a51bc5924d68d6b45 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Sun, 19 Jul 2020 14:43:31 -0400 Subject: hfsplus: fix two more overflows @@ -15,7 +15,7 @@ 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c -index dae43becc..9c4e4c88c 100644 +index dae43becc9..9c4e4c88c9 100644 --- a/grub-core/fs/hfsplus.c +++ b/grub-core/fs/hfsplus.c @@ -31,6 +31,7 @@ diff -Nru grub2-2.04/debian/patches/0094-lvm-fix-two-more-potential-data-dependent-alloc-over.patch grub2-2.04/debian/patches/0094-lvm-fix-two-more-potential-data-dependent-alloc-over.patch --- grub2-2.04/debian/patches/0094-lvm-fix-two-more-potential-data-dependent-alloc-over.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0094-lvm-fix-two-more-potential-data-dependent-alloc-over.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 9082c7d5ed8d9ffb15a12d6bcb10a86ca9c8a860 Mon Sep 17 00:00:00 2001 +From 468b5308618dd4e9d208b4a74068f2716ee1e088 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Sun, 19 Jul 2020 15:48:20 -0400 Subject: lvm: fix two more potential data-dependent alloc overflows @@ -15,7 +15,7 @@ 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c -index d1df640b3..d154f7c01 100644 +index d1df640b31..d154f7c01b 100644 --- a/grub-core/disk/lvm.c +++ b/grub-core/disk/lvm.c @@ -25,6 +25,7 @@ diff -Nru grub2-2.04/debian/patches/0095-efi-fix-some-malformed-device-path-arithmetic-errors.patch grub2-2.04/debian/patches/0095-efi-fix-some-malformed-device-path-arithmetic-errors.patch --- grub2-2.04/debian/patches/0095-efi-fix-some-malformed-device-path-arithmetic-errors.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0095-efi-fix-some-malformed-device-path-arithmetic-errors.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From c9148b4f42091e840b2659504401dab230f7d817 Mon Sep 17 00:00:00 2001 +From edde11e535d34c8513a10c97ce5d0dbad4a10d58 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Sun, 19 Jul 2020 16:53:27 -0400 Subject: efi: fix some malformed device path arithmetic errors. @@ -24,7 +24,7 @@ 4 files changed, 88 insertions(+), 21 deletions(-) diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c -index dc31caa21..b1a8b39b4 100644 +index dc31caa213..b1a8b39b49 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -332,7 +332,7 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0) @@ -150,7 +150,7 @@ return 0; } diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c -index b9a2df34b..f8a34cd49 100644 +index b9a2df34b1..f8a34cd491 100644 --- a/grub-core/loader/efi/chainloader.c +++ b/grub-core/loader/efi/chainloader.c @@ -126,6 +126,12 @@ copy_file_path (grub_efi_file_path_device_path_t *fp, @@ -188,7 +188,7 @@ break; d = GRUB_EFI_NEXT_DEVICE_PATH (d); diff --git a/grub-core/loader/i386/xnu.c b/grub-core/loader/i386/xnu.c -index b7d176b5d..c50cb5410 100644 +index b7d176b5d3..c50cb54109 100644 --- a/grub-core/loader/i386/xnu.c +++ b/grub-core/loader/i386/xnu.c @@ -516,14 +516,15 @@ grub_cmd_devprop_load (grub_command_t cmd __attribute__ ((unused)), @@ -212,7 +212,7 @@ dev = grub_xnu_devprop_add_device (dpstart, (char *) buf - (char *) dpstart); diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h -index 9824fbcd0..08bff60b5 100644 +index 9824fbcd0d..08bff60b51 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -640,6 +640,7 @@ typedef struct grub_efi_device_path grub_efi_device_path_protocol_t; diff -Nru grub2-2.04/debian/patches/0096-linuxefi-fail-kernel-validation-without-shim-protoco.patch grub2-2.04/debian/patches/0096-linuxefi-fail-kernel-validation-without-shim-protoco.patch --- grub2-2.04/debian/patches/0096-linuxefi-fail-kernel-validation-without-shim-protoco.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0096-linuxefi-fail-kernel-validation-without-shim-protoco.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From a37688a7dd2a14b66aa88005a9473f017aa84d17 Mon Sep 17 00:00:00 2001 +From 28f1f927abe2d1bd274442bc575c3802bc4d577d Mon Sep 17 00:00:00 2001 From: Dimitri John Ledkov Date: Wed, 22 Jul 2020 11:31:43 +0100 Subject: linuxefi: fail kernel validation without shim protocol. @@ -20,7 +20,7 @@ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c -index 1a5296a60..3f5496fc5 100644 +index 1a5296a60c..3f5496fc55 100644 --- a/grub-core/loader/arm64/linux.c +++ b/grub-core/loader/arm64/linux.c @@ -34,6 +34,7 @@ @@ -52,7 +52,7 @@ cmdline_size = grub_loader_cmdline_size (argc, argv) + sizeof (LINUX_IMAGE); diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c -index f8a34cd49..cf89cedf8 100644 +index f8a34cd491..cf89cedf8d 100644 --- a/grub-core/loader/efi/chainloader.c +++ b/grub-core/loader/efi/chainloader.c @@ -1096,6 +1096,7 @@ grub_cmd_chainloader (grub_command_t cmd __attribute__ ((unused)), @@ -64,7 +64,7 @@ grub_file_close (file); grub_device_close (dev); diff --git a/grub-core/loader/efi/linux.c b/grub-core/loader/efi/linux.c -index e372b26a1..f6d30bcf7 100644 +index e372b26a1b..f6d30bcf7c 100644 --- a/grub-core/loader/efi/linux.c +++ b/grub-core/loader/efi/linux.c @@ -34,6 +34,7 @@ struct grub_efi_shim_lock @@ -76,7 +76,7 @@ grub_linuxefi_secure_validate (void *data, grub_uint32_t size) { diff --git a/grub-core/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c -index 2929da7a2..e357bf67c 100644 +index 2929da7a29..e357bf67c6 100644 --- a/grub-core/loader/i386/efi/linux.c +++ b/grub-core/loader/i386/efi/linux.c @@ -199,7 +199,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), diff -Nru grub2-2.04/debian/patches/0097-Fix-a-regression-caused-by-efi-fix-some-malformed-de.patch grub2-2.04/debian/patches/0097-Fix-a-regression-caused-by-efi-fix-some-malformed-de.patch --- grub2-2.04/debian/patches/0097-Fix-a-regression-caused-by-efi-fix-some-malformed-de.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0097-Fix-a-regression-caused-by-efi-fix-some-malformed-de.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 77a41770dfb138bc68c43f86a6e9d05188a0da4f Mon Sep 17 00:00:00 2001 +From f87f39f286a5ed66b1fcccd329c4c1f5e6fb3b88 Mon Sep 17 00:00:00 2001 From: Chris Coulson Date: Wed, 22 Jul 2020 17:06:04 +0100 Subject: Fix a regression caused by "efi: fix some malformed device path @@ -21,7 +21,7 @@ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c -index cf89cedf8..d0c53077e 100644 +index cf89cedf8d..d0c53077e8 100644 --- a/grub-core/loader/efi/chainloader.c +++ b/grub-core/loader/efi/chainloader.c @@ -116,7 +116,7 @@ grub_chainloader_boot (void) diff -Nru grub2-2.04/debian/patches/0098-efi-Fix-use-after-free-in-halt-reboot-path.patch grub2-2.04/debian/patches/0098-efi-Fix-use-after-free-in-halt-reboot-path.patch --- grub2-2.04/debian/patches/0098-efi-Fix-use-after-free-in-halt-reboot-path.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0098-efi-Fix-use-after-free-in-halt-reboot-path.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 1e7e07cfd5c1caa76479b10e85e6a703d64e0fea Mon Sep 17 00:00:00 2001 +From 09e44bd33a938119cb8334e69cbcab38267b50aa Mon Sep 17 00:00:00 2001 From: Alexey Makhalov Date: Mon, 20 Jul 2020 23:03:05 +0000 Subject: efi: Fix use-after-free in halt/reboot path @@ -52,7 +52,7 @@ 9 files changed, 28 insertions(+), 7 deletions(-) diff --git a/grub-core/kern/arm/efi/init.c b/grub-core/kern/arm/efi/init.c -index 06df60e2f..40c3b467f 100644 +index 06df60e2f0..40c3b467fc 100644 --- a/grub-core/kern/arm/efi/init.c +++ b/grub-core/kern/arm/efi/init.c @@ -71,4 +71,7 @@ grub_machine_fini (int flags) @@ -64,7 +64,7 @@ + grub_efi_memory_fini (); } diff --git a/grub-core/kern/arm64/efi/init.c b/grub-core/kern/arm64/efi/init.c -index 6224999ec..5010caefd 100644 +index 6224999ec9..5010caefd6 100644 --- a/grub-core/kern/arm64/efi/init.c +++ b/grub-core/kern/arm64/efi/init.c @@ -57,4 +57,7 @@ grub_machine_fini (int flags) @@ -76,7 +76,7 @@ + grub_efi_memory_fini (); } diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c -index b1a8b39b4..88bbd34ea 100644 +index b1a8b39b49..88bbd34eac 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -157,7 +157,8 @@ grub_efi_get_loaded_image (grub_efi_handle_t image_handle) @@ -90,7 +90,7 @@ GRUB_EFI_RESET_COLD, GRUB_EFI_SUCCESS, 0, NULL); for (;;) ; diff --git a/grub-core/kern/efi/init.c b/grub-core/kern/efi/init.c -index 3dfdf2d22..2c31847bf 100644 +index 3dfdf2d22b..2c31847bf6 100644 --- a/grub-core/kern/efi/init.c +++ b/grub-core/kern/efi/init.c @@ -80,5 +80,4 @@ grub_efi_fini (void) @@ -100,7 +100,7 @@ - grub_efi_memory_fini (); } diff --git a/grub-core/kern/i386/efi/init.c b/grub-core/kern/i386/efi/init.c -index da499aba0..deb2eacd8 100644 +index da499aba04..deb2eacd8d 100644 --- a/grub-core/kern/i386/efi/init.c +++ b/grub-core/kern/i386/efi/init.c @@ -39,6 +39,11 @@ grub_machine_init (void) @@ -118,7 +118,7 @@ + grub_efi_memory_fini (); } diff --git a/grub-core/kern/ia64/efi/init.c b/grub-core/kern/ia64/efi/init.c -index b5ecbd091..f1965571b 100644 +index b5ecbd0912..f1965571b1 100644 --- a/grub-core/kern/ia64/efi/init.c +++ b/grub-core/kern/ia64/efi/init.c @@ -70,6 +70,11 @@ grub_machine_init (void) @@ -136,7 +136,7 @@ + grub_efi_memory_fini (); } diff --git a/grub-core/kern/riscv/efi/init.c b/grub-core/kern/riscv/efi/init.c -index 7eb1969d0..38795fe67 100644 +index 7eb1969d0b..38795fe674 100644 --- a/grub-core/kern/riscv/efi/init.c +++ b/grub-core/kern/riscv/efi/init.c @@ -73,4 +73,7 @@ grub_machine_fini (int flags) @@ -148,7 +148,7 @@ + grub_efi_memory_fini (); } diff --git a/grub-core/lib/efi/halt.c b/grub-core/lib/efi/halt.c -index 5859f0498..29d413641 100644 +index 5859f0498a..29d4136416 100644 --- a/grub-core/lib/efi/halt.c +++ b/grub-core/lib/efi/halt.c @@ -28,7 +28,8 @@ @@ -162,7 +162,7 @@ !defined(__riscv) grub_acpi_halt (); diff --git a/include/grub/loader.h b/include/grub/loader.h -index 7f82a499f..b20864282 100644 +index 7f82a499fd..b208642821 100644 --- a/include/grub/loader.h +++ b/include/grub/loader.h @@ -33,6 +33,7 @@ enum diff -Nru grub2-2.04/debian/patches/0099-chainloader-Avoid-a-double-free-when-validation-fail.patch grub2-2.04/debian/patches/0099-chainloader-Avoid-a-double-free-when-validation-fail.patch --- grub2-2.04/debian/patches/0099-chainloader-Avoid-a-double-free-when-validation-fail.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0099-chainloader-Avoid-a-double-free-when-validation-fail.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 06a88955852ba3c301f3a37c99faa813bd7262c8 Mon Sep 17 00:00:00 2001 +From 6245b194623730baa9f428e79e889e2907c34e01 Mon Sep 17 00:00:00 2001 From: Chris Coulson Date: Thu, 23 Jul 2020 14:02:17 +0100 Subject: chainloader: Avoid a double free when validation fails @@ -8,7 +8,7 @@ 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c -index d0c53077e..144a6549d 100644 +index d0c53077e8..144a6549df 100644 --- a/grub-core/loader/efi/chainloader.c +++ b/grub-core/loader/efi/chainloader.c @@ -1085,6 +1085,9 @@ grub_cmd_chainloader (grub_command_t cmd __attribute__ ((unused)), diff -Nru grub2-2.04/debian/patches/0100-relocator-Protect-grub_relocator_alloc_chunk_addr-in.patch grub2-2.04/debian/patches/0100-relocator-Protect-grub_relocator_alloc_chunk_addr-in.patch --- grub2-2.04/debian/patches/0100-relocator-Protect-grub_relocator_alloc_chunk_addr-in.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0100-relocator-Protect-grub_relocator_alloc_chunk_addr-in.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From d1e511e940a1f2577f568e11076df02c7a221042 Mon Sep 17 00:00:00 2001 +From c37a874169397daef4df39ef60e2f3ba91d445ac Mon Sep 17 00:00:00 2001 From: Alexey Makhalov Date: Wed, 15 Jul 2020 06:42:37 +0000 Subject: relocator: Protect grub_relocator_alloc_chunk_addr() input args @@ -19,7 +19,7 @@ 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c -index 991eb29db..4e14eb188 100644 +index 991eb29db9..4e14eb1887 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -36,6 +36,7 @@ @@ -47,7 +47,7 @@ return err; real_mode_mem = get_virtual_current_address (ch); diff --git a/grub-core/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c -index 3866f048b..81ab3c0c1 100644 +index 3866f048bb..81ab3c0c15 100644 --- a/grub-core/loader/i386/pc/linux.c +++ b/grub-core/loader/i386/pc/linux.c @@ -36,6 +36,7 @@ @@ -74,7 +74,7 @@ if (! grub_linux_is_bzimage && GRUB_LINUX_ZIMAGE_ADDR + grub_linux16_prot_size diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c -index 8f662c8ac..cd24874ca 100644 +index 8f662c8ac8..cd24874ca3 100644 --- a/grub-core/loader/i386/xen.c +++ b/grub-core/loader/i386/xen.c @@ -41,6 +41,7 @@ @@ -111,7 +111,7 @@ goto fail; kern_chunk_src = get_virtual_current_address (ch); diff --git a/grub-core/loader/xnu.c b/grub-core/loader/xnu.c -index 2f0ebd0b8..3fd653993 100644 +index 2f0ebd0b8b..3fd653993f 100644 --- a/grub-core/loader/xnu.c +++ b/grub-core/loader/xnu.c @@ -35,6 +35,7 @@ diff -Nru grub2-2.04/debian/patches/0101-relocator-Protect-grub_relocator_alloc_chunk_align-m.patch grub2-2.04/debian/patches/0101-relocator-Protect-grub_relocator_alloc_chunk_align-m.patch --- grub2-2.04/debian/patches/0101-relocator-Protect-grub_relocator_alloc_chunk_align-m.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0101-relocator-Protect-grub_relocator_alloc_chunk_align-m.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 91276109ad6be0700b9fee507063f01df0692070 Mon Sep 17 00:00:00 2001 +From 52396e83608848f0ca7f8920ac9985259b7cd1cf Mon Sep 17 00:00:00 2001 From: Alexey Makhalov Date: Wed, 8 Jul 2020 01:44:38 +0000 Subject: relocator: Protect grub_relocator_alloc_chunk_align() max_addr @@ -35,7 +35,7 @@ 13 files changed, 69 insertions(+), 58 deletions(-) diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c -index 71dd4f0ab..34cbe834f 100644 +index 71dd4f0ab0..34cbe834fa 100644 --- a/grub-core/lib/i386/relocator.c +++ b/grub-core/lib/i386/relocator.c @@ -83,11 +83,10 @@ grub_relocator32_boot (struct grub_relocator *rel, @@ -88,7 +88,7 @@ return err; diff --git a/grub-core/lib/mips/relocator.c b/grub-core/lib/mips/relocator.c -index 9d5f49cb9..743b213e6 100644 +index 9d5f49cb93..743b213e69 100644 --- a/grub-core/lib/mips/relocator.c +++ b/grub-core/lib/mips/relocator.c @@ -120,10 +120,8 @@ grub_relocator32_boot (struct grub_relocator *rel, @@ -105,7 +105,7 @@ if (err) return err; diff --git a/grub-core/lib/powerpc/relocator.c b/grub-core/lib/powerpc/relocator.c -index bdf2b111b..8ffb8b686 100644 +index bdf2b111be..8ffb8b6868 100644 --- a/grub-core/lib/powerpc/relocator.c +++ b/grub-core/lib/powerpc/relocator.c @@ -115,10 +115,8 @@ grub_relocator32_boot (struct grub_relocator *rel, @@ -122,7 +122,7 @@ if (err) return err; diff --git a/grub-core/lib/x86_64/efi/relocator.c b/grub-core/lib/x86_64/efi/relocator.c -index 3caef7a40..7d200a125 100644 +index 3caef7a402..7d200a125e 100644 --- a/grub-core/lib/x86_64/efi/relocator.c +++ b/grub-core/lib/x86_64/efi/relocator.c @@ -50,10 +50,9 @@ grub_relocator64_efi_boot (struct grub_relocator *rel, @@ -140,7 +140,7 @@ return err; diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c -index 4e14eb188..04bd78a1f 100644 +index 4e14eb1887..04bd78a1fa 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -184,9 +184,8 @@ allocate_pages (grub_size_t prot_size, grub_size_t *align, @@ -156,7 +156,7 @@ GRUB_RELOCATOR_PREFERENCE_LOW, 1); diff --git a/grub-core/loader/i386/multiboot_mbi.c b/grub-core/loader/i386/multiboot_mbi.c -index ad3cc292f..a67d9d0a8 100644 +index ad3cc292fd..a67d9d0a80 100644 --- a/grub-core/loader/i386/multiboot_mbi.c +++ b/grub-core/loader/i386/multiboot_mbi.c @@ -466,10 +466,9 @@ grub_multiboot_make_mbi (grub_uint32_t *target) @@ -174,7 +174,7 @@ return err; ptrorig = get_virtual_current_address (ch); diff --git a/grub-core/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c -index 81ab3c0c1..6400a5b91 100644 +index 81ab3c0c15..6400a5b91d 100644 --- a/grub-core/loader/i386/pc/linux.c +++ b/grub-core/loader/i386/pc/linux.c @@ -463,10 +463,8 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), @@ -191,7 +191,7 @@ return err; initrd_chunk = get_virtual_current_address (ch); diff --git a/grub-core/loader/mips/linux.c b/grub-core/loader/mips/linux.c -index 7b723bf18..e4ed95921 100644 +index 7b723bf189..e4ed95921d 100644 --- a/grub-core/loader/mips/linux.c +++ b/grub-core/loader/mips/linux.c @@ -442,12 +442,9 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), @@ -211,7 +211,7 @@ if (err) goto fail; diff --git a/grub-core/loader/multiboot.c b/grub-core/loader/multiboot.c -index 3e6ad166d..3e286908d 100644 +index 3e6ad166dc..3e286908dd 100644 --- a/grub-core/loader/multiboot.c +++ b/grub-core/loader/multiboot.c @@ -404,7 +404,7 @@ grub_cmd_module (grub_command_t cmd __attribute__ ((unused)), @@ -224,7 +224,7 @@ GRUB_RELOCATOR_PREFERENCE_NONE, 1); if (err) diff --git a/grub-core/loader/multiboot_elfxx.c b/grub-core/loader/multiboot_elfxx.c -index cc6853692..f2318e0d1 100644 +index cc6853692a..f2318e0d16 100644 --- a/grub-core/loader/multiboot_elfxx.c +++ b/grub-core/loader/multiboot_elfxx.c @@ -109,10 +109,10 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld) @@ -252,7 +252,7 @@ GRUB_RELOCATOR_PREFERENCE_NONE, mld->avoid_efi_boot_services); diff --git a/grub-core/loader/multiboot_mbi2.c b/grub-core/loader/multiboot_mbi2.c -index 53da78615..3ec209283 100644 +index 53da786151..3ec2092839 100644 --- a/grub-core/loader/multiboot_mbi2.c +++ b/grub-core/loader/multiboot_mbi2.c @@ -295,10 +295,10 @@ grub_multiboot2_load (grub_file_t file, const char *filename) @@ -280,7 +280,7 @@ GRUB_RELOCATOR_PREFERENCE_NONE, 1); if (err) diff --git a/grub-core/loader/xnu_resume.c b/grub-core/loader/xnu_resume.c -index 8089804d4..d648ef0cd 100644 +index 8089804d48..d648ef0cd3 100644 --- a/grub-core/loader/xnu_resume.c +++ b/grub-core/loader/xnu_resume.c @@ -129,7 +129,7 @@ grub_xnu_resume (char *imagename) @@ -293,7 +293,7 @@ GRUB_XNU_PAGESIZE, GRUB_RELOCATOR_PREFERENCE_NONE, 0); diff --git a/include/grub/relocator.h b/include/grub/relocator.h -index 24d8672d2..1b3bdd92a 100644 +index 24d8672d22..1b3bdd92ac 100644 --- a/include/grub/relocator.h +++ b/include/grub/relocator.h @@ -49,6 +49,35 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, diff -Nru grub2-2.04/debian/patches/0102-relocator-Fix-grub_relocator_alloc_chunk_align-top-m.patch grub2-2.04/debian/patches/0102-relocator-Fix-grub_relocator_alloc_chunk_align-top-m.patch --- grub2-2.04/debian/patches/0102-relocator-Fix-grub_relocator_alloc_chunk_align-top-m.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0102-relocator-Fix-grub_relocator_alloc_chunk_align-top-m.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From f5102243ac5d0cc9a319b2f5c4cbc2c518d0d137 Mon Sep 17 00:00:00 2001 +From e22a7ea411935cd237ab024da9399bf640ac5d3a Mon Sep 17 00:00:00 2001 From: Alexey Makhalov Date: Fri, 17 Jul 2020 05:17:26 +0000 Subject: relocator: Fix grub_relocator_alloc_chunk_align() top memory @@ -26,7 +26,7 @@ 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grub-core/lib/relocator.c b/grub-core/lib/relocator.c -index 5847aac36..f2c1944c2 100644 +index 5847aac364..f2c1944c28 100644 --- a/grub-core/lib/relocator.c +++ b/grub-core/lib/relocator.c @@ -1386,8 +1386,8 @@ grub_relocator_alloc_chunk_align (struct grub_relocator *rel, diff -Nru grub2-2.04/debian/patches/0103-linux-loader-avoid-overflow-on-initrd-size-calculati.patch grub2-2.04/debian/patches/0103-linux-loader-avoid-overflow-on-initrd-size-calculati.patch --- grub2-2.04/debian/patches/0103-linux-loader-avoid-overflow-on-initrd-size-calculati.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0103-linux-loader-avoid-overflow-on-initrd-size-calculati.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 3390bca8bde1f29b8d449f28d5a1fa4f08598af8 Mon Sep 17 00:00:00 2001 +From 7fcfd002718938add9d174ac52c679376a46d81c Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Fri, 24 Jul 2020 13:57:27 -0400 Subject: linux loader: avoid overflow on initrd size calculation @@ -9,7 +9,7 @@ 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grub-core/loader/linux.c b/grub-core/loader/linux.c -index 471b214d6..25624ebc1 100644 +index 471b214d6c..25624ebc11 100644 --- a/grub-core/loader/linux.c +++ b/grub-core/loader/linux.c @@ -151,8 +151,8 @@ grub_initrd_init (int argc, char *argv[], diff -Nru grub2-2.04/debian/patches/0104-linux-Fix-integer-overflows-in-initrd-size-handling.patch grub2-2.04/debian/patches/0104-linux-Fix-integer-overflows-in-initrd-size-handling.patch --- grub2-2.04/debian/patches/0104-linux-Fix-integer-overflows-in-initrd-size-handling.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0104-linux-Fix-integer-overflows-in-initrd-size-handling.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 5ae3595759c09e23b48fa2bb35abbe1f66c529bc Mon Sep 17 00:00:00 2001 +From 16fddf3d3adb7a8d10e67f75cbaaa76ebb6c8c93 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Sat, 25 Jul 2020 12:15:37 +0100 Subject: linux: Fix integer overflows in initrd size handling @@ -14,7 +14,7 @@ 1 file changed, 54 insertions(+), 20 deletions(-) diff --git a/grub-core/loader/linux.c b/grub-core/loader/linux.c -index 25624ebc1..e9f819ee9 100644 +index 25624ebc11..e9f819ee95 100644 --- a/grub-core/loader/linux.c +++ b/grub-core/loader/linux.c @@ -4,6 +4,7 @@ diff -Nru grub2-2.04/debian/patches/0105-efilinux-Fix-integer-overflows-in-grub_cmd_initrd.patch grub2-2.04/debian/patches/0105-efilinux-Fix-integer-overflows-in-grub_cmd_initrd.patch --- grub2-2.04/debian/patches/0105-efilinux-Fix-integer-overflows-in-grub_cmd_initrd.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/0105-efilinux-Fix-integer-overflows-in-grub_cmd_initrd.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From c15dfc896951a0d1fa03576a3354c59a873cb019 Mon Sep 17 00:00:00 2001 +From c7c111b9583d0fee45c420629e5be1a9e50fab37 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 27 Jul 2020 14:22:12 +0100 Subject: efilinux: Fix integer overflows in grub_cmd_initrd @@ -15,7 +15,7 @@ 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/grub-core/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c -index e357bf67c..381459ce0 100644 +index e357bf67c6..381459ce08 100644 --- a/grub-core/loader/i386/efi/linux.c +++ b/grub-core/loader/i386/efi/linux.c @@ -28,6 +28,7 @@ diff -Nru grub2-2.04/debian/patches/at_keyboard-module-init.patch grub2-2.04/debian/patches/at_keyboard-module-init.patch --- grub2-2.04/debian/patches/at_keyboard-module-init.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/at_keyboard-module-init.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 5365f46e0c28babd3ec09fa2c665b946ac9b3d0f Mon Sep 17 00:00:00 2001 +From f61a5f375ade9f3a39d3797626c9fb3741910e73 Mon Sep 17 00:00:00 2001 From: Jeroen Dekkers Date: Sat, 12 Jan 2019 21:02:18 +0100 Subject: at_keyboard: initialize keyboard in module init if keyboard is ready @@ -16,7 +16,7 @@ 1 file changed, 9 insertions(+) diff --git a/grub-core/term/at_keyboard.c b/grub-core/term/at_keyboard.c -index f0a986eb1..d4395c201 100644 +index f0a986eb17..d4395c2019 100644 --- a/grub-core/term/at_keyboard.c +++ b/grub-core/term/at_keyboard.c @@ -244,6 +244,14 @@ grub_at_keyboard_getkey (struct grub_term_input *term __attribute__ ((unused))) diff -Nru grub2-2.04/debian/patches/bash-completion-drop-have-checks.patch grub2-2.04/debian/patches/bash-completion-drop-have-checks.patch --- grub2-2.04/debian/patches/bash-completion-drop-have-checks.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/bash-completion-drop-have-checks.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From c3bac3061438a6308dc0191e72e295957270c755 Mon Sep 17 00:00:00 2001 +From ea4c85d4bdc6dda4a5786224455aa0e868e99250 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Fri, 16 Nov 2018 16:37:02 +0000 Subject: bash-completion: Drop "have" checks @@ -16,7 +16,7 @@ 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/util/bash-completion.d/grub-completion.bash.in b/util/bash-completion.d/grub-completion.bash.in -index 44bf135b9..d4235e7ef 100644 +index 44bf135b9f..d4235e7ef8 100644 --- a/util/bash-completion.d/grub-completion.bash.in +++ b/util/bash-completion.d/grub-completion.bash.in @@ -166,13 +166,11 @@ _grub_set_entry () { diff -Nru grub2-2.04/debian/patches/blacklist-1440x900x32.patch grub2-2.04/debian/patches/blacklist-1440x900x32.patch --- grub2-2.04/debian/patches/blacklist-1440x900x32.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/blacklist-1440x900x32.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From a48eec06d4c5c5d1e808b52c1193044c09d638c2 Mon Sep 17 00:00:00 2001 +From c4e1f78d093dcf870a792c843fb7e2bb25572fdc Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:11 +0000 Subject: Blacklist 1440x900x32 from VBE preferred mode handling @@ -13,7 +13,7 @@ 1 file changed, 9 insertions(+) diff --git a/grub-core/video/i386/pc/vbe.c b/grub-core/video/i386/pc/vbe.c -index b7f911926..4b1bd7d5e 100644 +index b7f911926d..4b1bd7d5ea 100644 --- a/grub-core/video/i386/pc/vbe.c +++ b/grub-core/video/i386/pc/vbe.c @@ -1054,6 +1054,15 @@ grub_video_vbe_setup (unsigned int width, unsigned int height, diff -Nru grub2-2.04/debian/patches/bootp-new-net_bootp6-command.patch grub2-2.04/debian/patches/bootp-new-net_bootp6-command.patch --- grub2-2.04/debian/patches/bootp-new-net_bootp6-command.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/bootp-new-net_bootp6-command.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From c5375c14deee6e8fd23a018d583495e5c4f95930 Mon Sep 17 00:00:00 2001 +From 4a7d6cd9eea972eec68cb256990879ea64883c4e Mon Sep 17 00:00:00 2001 From: Michael Chang Date: Thu, 27 Oct 2016 17:41:04 -0400 Subject: bootp: New net_bootp6 command @@ -17,7 +17,7 @@ 3 files changed, 1018 insertions(+), 1 deletion(-) diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c -index 04cfbb045..21c1824ef 100644 +index 04cfbb0450..21c1824efb 100644 --- a/grub-core/net/bootp.c +++ b/grub-core/net/bootp.c @@ -24,6 +24,98 @@ @@ -969,7 +969,7 @@ + grub_unregister_command (cmd_bootp6); } diff --git a/grub-core/net/ip.c b/grub-core/net/ip.c -index ea5edf8f1..01410798b 100644 +index ea5edf8f1f..01410798b3 100644 --- a/grub-core/net/ip.c +++ b/grub-core/net/ip.c @@ -239,6 +239,45 @@ handle_dgram (struct grub_net_buff *nb, @@ -1019,7 +1019,7 @@ { const struct grub_net_bootp_packet *bootp; diff --git a/include/grub/net.h b/include/grub/net.h -index cc114286e..58cff96d2 100644 +index cc114286ea..58cff96d2a 100644 --- a/include/grub/net.h +++ b/include/grub/net.h @@ -448,6 +448,66 @@ struct grub_net_bootp_packet diff -Nru grub2-2.04/debian/patches/bootp-process-dhcpack-http-boot.patch grub2-2.04/debian/patches/bootp-process-dhcpack-http-boot.patch --- grub2-2.04/debian/patches/bootp-process-dhcpack-http-boot.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/bootp-process-dhcpack-http-boot.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 6e1e440798cf53f89f0e5a177d781f0b3d4bc1ca Mon Sep 17 00:00:00 2001 +From d73452b035016da03ebc58a2059ad5f9588a272e Mon Sep 17 00:00:00 2001 From: Michael Chang Date: Thu, 27 Oct 2016 17:42:19 -0400 Subject: bootp: Add processing DHCPACK packet from HTTP Boot @@ -24,7 +24,7 @@ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c -index 21c1824ef..558d97ba1 100644 +index 21c1824efb..558d97ba1e 100644 --- a/grub-core/net/bootp.c +++ b/grub-core/net/bootp.c @@ -154,7 +154,7 @@ struct grub_dhcp_request_options @@ -109,7 +109,7 @@ }, GRUB_NET_BOOTP_END, diff --git a/include/grub/net.h b/include/grub/net.h -index 58cff96d2..b5f9e617e 100644 +index 58cff96d2a..b5f9e617e5 100644 --- a/include/grub/net.h +++ b/include/grub/net.h @@ -523,6 +523,7 @@ enum diff -Nru grub2-2.04/debian/patches/cherry-enable-datetime-emu.patch grub2-2.04/debian/patches/cherry-enable-datetime-emu.patch --- grub2-2.04/debian/patches/cherry-enable-datetime-emu.patch 1970-01-01 00:00:00.000000000 +0000 +++ grub2-2.04/debian/patches/cherry-enable-datetime-emu.patch 2021-02-11 16:22:35.000000000 +0000 @@ -0,0 +1,34 @@ +From 0247661a49f4e891ebb4a647f26bf9d649d624f5 Mon Sep 17 00:00:00 2001 +From: Mike Gilbert +Date: Thu, 5 Mar 2020 16:52:18 -0500 +Subject: datetime: Enable the datetime module for the emu platform + +Fixes a build failure: + + grub-core/commands/date.c:49: undefined reference to `grub_get_weekday_name' + grub-core/commands/ls.c:155: undefined reference to `grub_unixtime2datetime' + +Bug: https://bugs.gentoo.org/711512 + +Signed-off-by: Mike Gilbert +Reviewed-by: Javier Martinez Canillas +Tested-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper + +Patch-Name: cherry-enable-datetime-emu.patch +--- + grub-core/Makefile.core.def | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index 1c71233d06..01819d1044 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -1692,7 +1692,6 @@ module = { + i386_xen_pvh = lib/xen/datetime.c; + + mips_arc = lib/arc/datetime.c; +- enable = noemu; + }; + + module = { diff -Nru grub2-2.04/debian/patches/cherry-move-common-datetime-functions.patch grub2-2.04/debian/patches/cherry-move-common-datetime-functions.patch --- grub2-2.04/debian/patches/cherry-move-common-datetime-functions.patch 1970-01-01 00:00:00.000000000 +0000 +++ grub2-2.04/debian/patches/cherry-move-common-datetime-functions.patch 2021-02-11 16:22:35.000000000 +0000 @@ -0,0 +1,88 @@ +From 7d5696d34d9ef11aec2f4447d656eb22041db977 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Fri, 14 Feb 2020 12:44:14 +0100 +Subject: normal: Move common datetime functions out of the normal module + +The common datetime helper functions are currently included in the normal +module, but this makes any other module that calls these functions to have +a dependency with the normal module only for this reason. + +Since the normal module does a lot of stuff, it calls functions from other +modules. But since other modules may depend on it for calling the datetime +helpers, this could lead to circular dependencies between modules. + +As an example, when platform == xen the grub_get_datetime() function from +the datetime module calls to the grub_unixtime2datetime() helper function +from the normal module. Which leads to the following module dependency: + + datetime -> normal + +and send_dhcp_packet() from the net module calls the grub_get_datetime() +function, which leads to the following module dependency: + + net -> datetime -> normal + +but that means that the normal module is not allowed to depend on net or +any other module that depends on it due the transitive dependency caused +by datetime. A recent patch attempted to add support to fetch the config +file over the network, which leads to the following circular dependency: + + normal -> net -> datetime -> normal + +So having the datetime helpers in the normal module makes it quite fragile +and easy to add circular dependencies like these, that break the build due +the genmoddep.awk script catching the issues. + +Fix this by taking the datetime helper functions out of the normal module +and instead add them to the datetime module itself. Besides fixing these +issues, it makes more sense to have these helper functions there anyways. + +Reported-by: Daniel Kiper +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper + +Patch-Name: cherry-move-common-datetime-functions.patch +--- + Makefile.util.def | 2 +- + grub-core/Makefile.core.def | 2 +- + grub-core/{normal => lib}/datetime.c | 0 + 3 files changed, 2 insertions(+), 2 deletions(-) + rename grub-core/{normal => lib}/datetime.c (100%) + +diff --git a/Makefile.util.def b/Makefile.util.def +index 504d1c0581..fd5a9b87d7 100644 +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -139,7 +139,7 @@ library = { + common = grub-core/lib/crc.c; + common = grub-core/lib/adler32.c; + common = grub-core/lib/crc64.c; +- common = grub-core/normal/datetime.c; ++ common = grub-core/lib/datetime.c; + common = grub-core/normal/misc.c; + common = grub-core/partmap/acorn.c; + common = grub-core/partmap/amiga.c; +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index 20be18575f..1c71233d06 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -1679,6 +1679,7 @@ module = { + + module = { + name = datetime; ++ common = lib/datetime.c; + cmos = lib/cmos_datetime.c; + efi = lib/efi/datetime.c; + uboot = lib/dummy/datetime.c; +@@ -1931,7 +1932,6 @@ module = { + common = normal/autofs.c; + common = normal/color.c; + common = normal/completion.c; +- common = normal/datetime.c; + common = normal/menu.c; + common = normal/menu_entry.c; + common = normal/menu_text.c; +diff --git a/grub-core/normal/datetime.c b/grub-core/lib/datetime.c +similarity index 100% +rename from grub-core/normal/datetime.c +rename to grub-core/lib/datetime.c diff -Nru grub2-2.04/debian/patches/cherrypick-lsefisystab-define-smbios3.patch grub2-2.04/debian/patches/cherrypick-lsefisystab-define-smbios3.patch --- grub2-2.04/debian/patches/cherrypick-lsefisystab-define-smbios3.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/cherrypick-lsefisystab-define-smbios3.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 7a7aa7f7da952420277726d4e2279716d1738aa6 Mon Sep 17 00:00:00 2001 +From 8b92e090fe7957297ddbadbbd80bce2c9ca12ce9 Mon Sep 17 00:00:00 2001 From: David Michael Date: Fri, 5 Jul 2019 08:47:02 -0400 Subject: lsefisystab: Define SMBIOS3 entry point structures for EFI @@ -16,7 +16,7 @@ 2 files changed, 6 insertions(+) diff --git a/grub-core/commands/efi/lsefisystab.c b/grub-core/commands/efi/lsefisystab.c -index df1030221..7c039c509 100644 +index df10302218..7c039c5097 100644 --- a/grub-core/commands/efi/lsefisystab.c +++ b/grub-core/commands/efi/lsefisystab.c @@ -48,6 +48,7 @@ static const struct guid_mapping guid_mappings[] = @@ -28,7 +28,7 @@ { GRUB_EFI_TIANO_CUSTOM_DECOMPRESS_GUID, "TIANO CUSTOM DECOMPRESS"}, { GRUB_EFI_TSC_FREQUENCY_GUID, "TSC FREQUENCY"}, diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h -index 75befd10e..9824fbcd0 100644 +index 75befd10e5..9824fbcd0d 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -314,6 +314,11 @@ diff -Nru grub2-2.04/debian/patches/cherrypick-lsefisystab-show-dtb.patch grub2-2.04/debian/patches/cherrypick-lsefisystab-show-dtb.patch --- grub2-2.04/debian/patches/cherrypick-lsefisystab-show-dtb.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/cherrypick-lsefisystab-show-dtb.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From b67cba441eece77123d08105d447128e09593194 Mon Sep 17 00:00:00 2001 +From 4146bb57f883cb8e0dd7d9a92adb45017ec11b5b Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Sat, 6 Jul 2019 11:11:02 +0200 Subject: lsefisystab: Add support for device tree table @@ -27,7 +27,7 @@ 1 file changed, 1 insertion(+) diff --git a/grub-core/commands/efi/lsefisystab.c b/grub-core/commands/efi/lsefisystab.c -index 7c039c509..902788250 100644 +index 7c039c5097..902788250e 100644 --- a/grub-core/commands/efi/lsefisystab.c +++ b/grub-core/commands/efi/lsefisystab.c @@ -40,6 +40,7 @@ static const struct guid_mapping guid_mappings[] = diff -Nru grub2-2.04/debian/patches/cherrypick-smbios-module.patch grub2-2.04/debian/patches/cherrypick-smbios-module.patch --- grub2-2.04/debian/patches/cherrypick-smbios-module.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/cherrypick-smbios-module.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 1eea32e0f58e90b1a7682f01b06c68f56349fb3d Mon Sep 17 00:00:00 2001 +From e14c0f0df2a9321ac7aa65b3fcbff76ca2397600 Mon Sep 17 00:00:00 2001 From: David Michael Date: Fri, 5 Jul 2019 08:47:09 -0400 Subject: smbios: Add a module for retrieving SMBIOS information @@ -33,7 +33,7 @@ create mode 100644 include/grub/smbios.h diff --git a/docs/grub.texi b/docs/grub.texi -index 1baa0fa20..d573f32cb 100644 +index 1baa0fa20f..d573f32cbb 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -3976,6 +3976,7 @@ you forget a command, you can run the command @command{help} @@ -126,7 +126,7 @@ @subsection source diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def -index 33e75021d..9b20f3335 100644 +index 33e75021da..9b20f33355 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -1106,6 +1106,21 @@ module = { @@ -153,7 +153,7 @@ ieee1275 = commands/ieee1275/suspend.c; diff --git a/grub-core/commands/efi/smbios.c b/grub-core/commands/efi/smbios.c new file mode 100644 -index 000000000..75202d5aa +index 0000000000..75202d5aad --- /dev/null +++ b/grub-core/commands/efi/smbios.c @@ -0,0 +1,61 @@ @@ -220,7 +220,7 @@ +} diff --git a/grub-core/commands/i386/pc/smbios.c b/grub-core/commands/i386/pc/smbios.c new file mode 100644 -index 000000000..069d66367 +index 0000000000..069d663673 --- /dev/null +++ b/grub-core/commands/i386/pc/smbios.c @@ -0,0 +1,52 @@ @@ -278,7 +278,7 @@ +} diff --git a/grub-core/commands/smbios.c b/grub-core/commands/smbios.c new file mode 100644 -index 000000000..7a6a391fc +index 0000000000..7a6a391fc1 --- /dev/null +++ b/grub-core/commands/smbios.c @@ -0,0 +1,374 @@ @@ -657,7 +657,7 @@ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/efiemu/i386/pc/cfgtables.c b/grub-core/efiemu/i386/pc/cfgtables.c -index 492c07c46..e5fffb7d4 100644 +index 492c07c468..e5fffb7d4a 100644 --- a/grub-core/efiemu/i386/pc/cfgtables.c +++ b/grub-core/efiemu/i386/pc/cfgtables.c @@ -22,11 +22,11 @@ @@ -696,7 +696,7 @@ } diff --git a/include/grub/smbios.h b/include/grub/smbios.h new file mode 100644 -index 000000000..15ec260b3 +index 0000000000..15ec260b32 --- /dev/null +++ b/include/grub/smbios.h @@ -0,0 +1,69 @@ diff -Nru grub2-2.04/debian/patches/core-in-fs.patch grub2-2.04/debian/patches/core-in-fs.patch --- grub2-2.04/debian/patches/core-in-fs.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/core-in-fs.patch 2021-02-11 16:22:32.000000000 +0000 @@ -11,7 +11,7 @@ 1 file changed, 8 insertions(+) diff --git a/util/setup.c b/util/setup.c -index 6f88f3cc4..fbdf2fcc5 100644 +index 6f88f3cc43..fbdf2fcc59 100644 --- a/util/setup.c +++ b/util/setup.c @@ -58,6 +58,8 @@ diff -Nru grub2-2.04/debian/patches/default-grub-d.patch grub2-2.04/debian/patches/default-grub-d.patch --- grub2-2.04/debian/patches/default-grub-d.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/default-grub-d.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From c3ad86f659b0a1af2033086101936f3a17e67a0a Mon Sep 17 00:00:00 2001 +From f2ded0cae4b5cad58e2bdcaae2b3f02e9a74969b Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:10 +0000 Subject: Read /etc/default/grub.d/*.cfg after /etc/default/grub @@ -14,7 +14,7 @@ 2 files changed, 98 insertions(+), 21 deletions(-) diff --git a/grub-core/osdep/unix/config.c b/grub-core/osdep/unix/config.c -index 65effa9f3..5478030fd 100644 +index 65effa9f3a..5478030fde 100644 --- a/grub-core/osdep/unix/config.c +++ b/grub-core/osdep/unix/config.c @@ -24,6 +24,8 @@ @@ -178,7 +178,7 @@ + free (cfgdir); } diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in -index b506d63bf..d18bf972f 100644 +index b506d63bf9..d18bf972f7 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -164,6 +164,11 @@ fi diff -Nru grub2-2.04/debian/patches/disable-floppies.patch grub2-2.04/debian/patches/disable-floppies.patch --- grub2-2.04/debian/patches/disable-floppies.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/disable-floppies.patch 2021-02-11 16:22:32.000000000 +0000 @@ -13,7 +13,7 @@ 1 file changed, 12 insertions(+) diff --git a/grub-core/kern/emu/hostdisk.c b/grub-core/kern/emu/hostdisk.c -index e9ec680cd..8ac523953 100644 +index e9ec680cdb..8ac5239538 100644 --- a/grub-core/kern/emu/hostdisk.c +++ b/grub-core/kern/emu/hostdisk.c @@ -532,6 +532,18 @@ read_device_map (const char *dev_map) diff -Nru grub2-2.04/debian/patches/dpkg-version-comparison.patch grub2-2.04/debian/patches/dpkg-version-comparison.patch --- grub2-2.04/debian/patches/dpkg-version-comparison.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/dpkg-version-comparison.patch 2021-02-11 16:22:32.000000000 +0000 @@ -12,7 +12,7 @@ 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in -index 0f801cab3..b6606c16e 100644 +index 0f801cab3e..b6606c16e0 100644 --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in @@ -239,8 +239,9 @@ version_test_numeric () diff -Nru grub2-2.04/debian/patches/efinet-set-dns-from-uefi-proto.patch grub2-2.04/debian/patches/efinet-set-dns-from-uefi-proto.patch --- grub2-2.04/debian/patches/efinet-set-dns-from-uefi-proto.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/efinet-set-dns-from-uefi-proto.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 5e2600c379b6ef398a18081b65367f0674c935dc Mon Sep 17 00:00:00 2001 +From b51e087e9dbe308b764f62799677db7515deb989 Mon Sep 17 00:00:00 2001 From: Michael Chang Date: Thu, 27 Oct 2016 17:43:21 -0400 Subject: efinet: Setting DNS server from UEFI protocol @@ -35,7 +35,7 @@ 2 files changed, 239 insertions(+) diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c -index 2d3b00f0e..82a28fb6e 100644 +index 2d3b00f0e1..82a28fb6e9 100644 --- a/grub-core/net/drivers/efi/efinet.c +++ b/grub-core/net/drivers/efi/efinet.c @@ -30,6 +30,8 @@ GRUB_MOD_LICENSE ("GPLv3+"); @@ -244,7 +244,7 @@ } diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h -index 664cea37b..75befd10e 100644 +index 664cea37b5..75befd10e5 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -334,6 +334,16 @@ diff -Nru grub2-2.04/debian/patches/efinet-set-network-from-uefi-devpath.patch grub2-2.04/debian/patches/efinet-set-network-from-uefi-devpath.patch --- grub2-2.04/debian/patches/efinet-set-network-from-uefi-devpath.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/efinet-set-network-from-uefi-devpath.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 521dfb27bc786d0567c97b704381677f57c4cfe4 Mon Sep 17 00:00:00 2001 +From a136c5cea7ac45ed8afc92739fa642949ac47148 Mon Sep 17 00:00:00 2001 From: Michael Chang Date: Thu, 27 Oct 2016 17:43:05 -0400 Subject: efinet: Setting network from UEFI device path @@ -34,7 +34,7 @@ 2 files changed, 270 insertions(+), 9 deletions(-) diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c -index fc90415f2..2d3b00f0e 100644 +index fc90415f29..2d3b00f0e1 100644 --- a/grub-core/net/drivers/efi/efinet.c +++ b/grub-core/net/drivers/efi/efinet.c @@ -23,6 +23,7 @@ @@ -358,7 +358,7 @@ } } diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h -index ca6cdc159..664cea37b 100644 +index ca6cdc1596..664cea37b5 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -825,6 +825,8 @@ struct grub_efi_ipv4_device_path diff -Nru grub2-2.04/debian/patches/efinet-uefi-ipv6-pxe-support.patch grub2-2.04/debian/patches/efinet-uefi-ipv6-pxe-support.patch --- grub2-2.04/debian/patches/efinet-uefi-ipv6-pxe-support.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/efinet-uefi-ipv6-pxe-support.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From efa94cf400cddc721b15210e46471c867cf727e1 Mon Sep 17 00:00:00 2001 +From dd26db90bdd5eb3245365767765ab8797ef3656b Mon Sep 17 00:00:00 2001 From: Michael Chang Date: Thu, 27 Oct 2016 17:41:21 -0400 Subject: efinet: UEFI IPv6 PXE support @@ -17,7 +17,7 @@ 2 files changed, 73 insertions(+), 6 deletions(-) diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c -index 5388f952b..fc90415f2 100644 +index 5388f952ba..fc90415f29 100644 --- a/grub-core/net/drivers/efi/efinet.c +++ b/grub-core/net/drivers/efi/efinet.c @@ -378,11 +378,25 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device, @@ -52,7 +52,7 @@ } } diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h -index addcbfa8f..ca6cdc159 100644 +index addcbfa8fb..ca6cdc1596 100644 --- a/include/grub/efi/api.h +++ b/include/grub/efi/api.h @@ -1452,14 +1452,67 @@ typedef struct grub_efi_simple_text_output_interface grub_efi_simple_text_output diff -Nru grub2-2.04/debian/patches/efi-variable-storage-minimise-writes.patch grub2-2.04/debian/patches/efi-variable-storage-minimise-writes.patch --- grub2-2.04/debian/patches/efi-variable-storage-minimise-writes.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/efi-variable-storage-minimise-writes.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From b18e6318f49373c1018be8b6d34266a009f10ae8 Mon Sep 17 00:00:00 2001 +From c4bb7e3976f1c6edb995e6f78f55f81d76e8d701 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 11 Mar 2019 11:17:43 +0000 Subject: Minimise writes to EFI variable storage @@ -60,7 +60,7 @@ create mode 100644 grub-core/osdep/unix/efivar.c diff --git a/INSTALL b/INSTALL -index 8acb40902..342c158e9 100644 +index 8acb409023..342c158e91 100644 --- a/INSTALL +++ b/INSTALL @@ -41,6 +41,11 @@ configuring the GRUB. @@ -76,7 +76,7 @@ * libdevmapper 1.02.34 or later (recommended) diff --git a/Makefile.util.def b/Makefile.util.def -index ce133e694..504d1c058 100644 +index ce133e694e..504d1c0581 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -565,6 +565,8 @@ program = { @@ -180,7 +180,7 @@ script = { diff --git a/configure.ac b/configure.ac -index e382c7480..883245553 100644 +index e382c7480d..883245553d 100644 --- a/configure.ac +++ b/configure.ac @@ -443,6 +443,18 @@ AC_CHECK_HEADER([util.h], [ @@ -204,7 +204,7 @@ CFLAGS="$HOST_CFLAGS -Wtrampolines -Werror" diff --git a/grub-core/osdep/efivar.c b/grub-core/osdep/efivar.c new file mode 100644 -index 000000000..d2750e252 +index 0000000000..d2750e2524 --- /dev/null +++ b/grub-core/osdep/efivar.c @@ -0,0 +1,3 @@ @@ -213,7 +213,7 @@ +#endif diff --git a/grub-core/osdep/unix/efivar.c b/grub-core/osdep/unix/efivar.c new file mode 100644 -index 000000000..4a58328b4 +index 0000000000..4a58328b42 --- /dev/null +++ b/grub-core/osdep/unix/efivar.c @@ -0,0 +1,508 @@ @@ -726,7 +726,7 @@ + +#endif /* HAVE_EFIVAR */ diff --git a/grub-core/osdep/unix/platform.c b/grub-core/osdep/unix/platform.c -index 9c439326a..b561174ea 100644 +index 9c439326a0..b561174ea9 100644 --- a/grub-core/osdep/unix/platform.c +++ b/grub-core/osdep/unix/platform.c @@ -19,15 +19,12 @@ @@ -856,7 +856,7 @@ void diff --git a/include/grub/util/install.h b/include/grub/util/install.h -index 8aeb5c4f2..a521f1663 100644 +index 8aeb5c4f20..a521f1663f 100644 --- a/include/grub/util/install.h +++ b/include/grub/util/install.h @@ -219,6 +219,11 @@ grub_install_get_default_x86_platform (void); @@ -872,7 +872,7 @@ grub_install_register_efi (grub_device_t efidir_grub_dev, const char *efifile_path, diff --git a/util/grub-install.c b/util/grub-install.c -index 4bad8de61..63462e4e0 100644 +index 4bad8de612..63462e4e09 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -2084,7 +2084,7 @@ main (int argc, char *argv[]) diff -Nru grub2-2.04/debian/patches/gettext-quiet.patch grub2-2.04/debian/patches/gettext-quiet.patch --- grub2-2.04/debian/patches/gettext-quiet.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/gettext-quiet.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 02b91d62746f4bde8349bbd605b18fb354a85048 Mon Sep 17 00:00:00 2001 +From 64b89f49fa9c0ac6f509a336461bb6873529b558 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:02 +0000 Subject: Silence error messages when translations are unavailable @@ -13,7 +13,7 @@ 1 file changed, 5 insertions(+) diff --git a/grub-core/gettext/gettext.c b/grub-core/gettext/gettext.c -index 4d02e62c1..2a19389f2 100644 +index 4d02e62c10..2a19389f2a 100644 --- a/grub-core/gettext/gettext.c +++ b/grub-core/gettext/gettext.c @@ -427,6 +427,11 @@ grub_gettext_init_ext (struct grub_gettext_context *ctx, diff -Nru grub2-2.04/debian/patches/gfxpayload-dynamic.patch grub2-2.04/debian/patches/gfxpayload-dynamic.patch --- grub2-2.04/debian/patches/gfxpayload-dynamic.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/gfxpayload-dynamic.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 40e9945c86cb9ea3d2a23789e7cdbce9905387e1 Mon Sep 17 00:00:00 2001 +From e08a572868894f248eef9606234b3fca208cdf8d Mon Sep 17 00:00:00 2001 From: Evan Broder Date: Mon, 13 Jan 2014 12:13:29 +0000 Subject: Add configure option to enable gfxpayload=keep dynamically @@ -23,7 +23,7 @@ create mode 100644 grub-core/commands/i386/pc/hwmatch.c diff --git a/configure.ac b/configure.ac -index 7dda5bb32..dbc429ce0 100644 +index 7dda5bb32b..dbc429ce0a 100644 --- a/configure.ac +++ b/configure.ac @@ -1879,6 +1879,17 @@ else @@ -45,7 +45,7 @@ AC_SUBST([FONT_SOURCE]) diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def -index 474a63e68..aadb4cdff 100644 +index 474a63e68c..aadb4cdff8 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -971,6 +971,14 @@ module = { @@ -65,7 +65,7 @@ common = commands/keystatus.c; diff --git a/grub-core/commands/i386/pc/hwmatch.c b/grub-core/commands/i386/pc/hwmatch.c new file mode 100644 -index 000000000..6de07cecc +index 0000000000..6de07cecc8 --- /dev/null +++ b/grub-core/commands/i386/pc/hwmatch.c @@ -0,0 +1,146 @@ @@ -216,7 +216,7 @@ + grub_unregister_command (cmd); +} diff --git a/include/grub/file.h b/include/grub/file.h -index 31567483c..e3c4cae2b 100644 +index 31567483cc..e3c4cae2b5 100644 --- a/include/grub/file.h +++ b/include/grub/file.h @@ -122,6 +122,7 @@ enum grub_file_type @@ -228,7 +228,7 @@ GRUB_FILE_TYPE_LOADENV, GRUB_FILE_TYPE_SAVEENV, diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index 2be66c702..09393c28e 100644 +index 2be66c7028..09393c28ee 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -23,6 +23,7 @@ datarootdir="@datarootdir@" @@ -290,7 +290,7 @@ # yet, so it's empty. In a submenu it will be equal to '\t' (one tab). submenu_indentation="" diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index ec4b49d9d..8cd7d1285 100755 +index 5aedc6cd83..ee1d1d272d 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in @@ -22,6 +22,7 @@ datarootdir="@datarootdir@" @@ -301,7 +301,7 @@ . "${pkgdatadir}/grub-mkconfig_lib" -@@ -716,6 +717,41 @@ generate_grub_menu_metadata() { +@@ -732,6 +733,41 @@ generate_grub_menu_metadata() { done } @@ -343,7 +343,7 @@ # Cache for prepare_grub_to_access_device call # $1: boot_device # $2: submenu_level -@@ -776,9 +812,11 @@ zfs_linux_entry () { +@@ -792,9 +828,11 @@ zfs_linux_entry () { if [ "${GRUB_GFXPAYLOAD_LINUX}" != "text" ]; then echo "${submenu_indentation} load_video" fi @@ -358,7 +358,7 @@ fi echo "${submenu_indentation} insmod gzio" -@@ -841,6 +879,8 @@ generate_grub_menu() { +@@ -858,6 +896,8 @@ generate_grub_menu() { GRUB_CMDLINE_LINUX_RECOVERY="${GRUB_CMDLINE_LINUX_RECOVERY} nomodeset" fi diff -Nru grub2-2.04/debian/patches/gfxpayload-keep-default.patch grub2-2.04/debian/patches/gfxpayload-keep-default.patch --- grub2-2.04/debian/patches/gfxpayload-keep-default.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/gfxpayload-keep-default.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 6b3668640698cff6e0f57bba665a594c11f02841 Mon Sep 17 00:00:00 2001 +From 56c2a16008199e011b86494490a70eda70227c7f Mon Sep 17 00:00:00 2001 From: Didier Roche Date: Tue, 31 Mar 2020 15:09:45 +0200 Subject: Disable gfxpayload=keep by default @@ -24,7 +24,7 @@ 2 files changed, 8 deletions(-) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index a75096609..f839b3b55 100644 +index a75096609a..f839b3b55f 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -118,10 +118,6 @@ linux_entry () @@ -39,10 +39,10 @@ if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then echo " load_video" | sed "s/^/$submenu_indentation/" diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index 5ec65fa94..b24587f0a 100755 +index f321fe2149..d128b82323 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in -@@ -744,10 +744,6 @@ zfs_linux_entry () { +@@ -760,10 +760,6 @@ zfs_linux_entry () { # FIXME: We need an interface to select vesafb in case efifb can't be used. if [ "${GRUB_GFXPAYLOAD_LINUX}" = "" ]; then echo "${submenu_indentation} load_video" diff -Nru grub2-2.04/debian/patches/grub.cfg-400.patch grub2-2.04/debian/patches/grub.cfg-400.patch --- grub2-2.04/debian/patches/grub.cfg-400.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/grub.cfg-400.patch 2021-02-11 16:22:32.000000000 +0000 @@ -9,7 +9,7 @@ 1 file changed, 4 insertions(+) diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in -index 9f477ff05..45cd4cc54 100644 +index 9f477ff054..45cd4cc541 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -276,6 +276,10 @@ for i in "${grub_mkconfig_dir}"/* ; do diff -Nru grub2-2.04/debian/patches/grub-install-backup-and-restore.patch grub2-2.04/debian/patches/grub-install-backup-and-restore.patch --- grub2-2.04/debian/patches/grub-install-backup-and-restore.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/grub-install-backup-and-restore.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From c47bc78e6fd9e2be4f0f77dc5bc80988e7446881 Mon Sep 17 00:00:00 2001 +From 0e69b48858ba0d94d854bcde740d64f700903d5c Mon Sep 17 00:00:00 2001 From: Dimitri John Ledkov Date: Wed, 19 Aug 2020 01:49:09 +0100 Subject: grub-install: Add backup and restore @@ -28,7 +28,7 @@ 2 files changed, 91 insertions(+), 16 deletions(-) diff --git a/configure.ac b/configure.ac -index 1819188f9..6a88b9b0c 100644 +index 1819188f9f..6a88b9b0c0 100644 --- a/configure.ac +++ b/configure.ac @@ -420,7 +420,7 @@ else @@ -41,7 +41,7 @@ # glibc 2.25 still includes sys/sysmacros.h in sys/types.h but emits deprecation diff --git a/util/grub-install-common.c b/util/grub-install-common.c -index 447504d3f..61f9075bc 100644 +index 447504d3f4..61f9075bcc 100644 --- a/util/grub-install-common.c +++ b/util/grub-install-common.c @@ -185,38 +185,113 @@ grub_install_mkdir_p (const char *dst) diff -Nru grub2-2.04/debian/patches/grub-install-pvxen-paths.patch grub2-2.04/debian/patches/grub-install-pvxen-paths.patch --- grub2-2.04/debian/patches/grub-install-pvxen-paths.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/grub-install-pvxen-paths.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 66bbce074947abe680475dacfb1cde35b7c17ef3 Mon Sep 17 00:00:00 2001 +From 56b487b186dbcddf31cbadcf91496ab729d55b81 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Sat, 6 Sep 2014 12:20:12 +0100 Subject: grub-install: Install PV Xen binaries into the upstream specified @@ -28,7 +28,7 @@ 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/util/grub-install.c b/util/grub-install.c -index 70d6700de..64c292383 100644 +index 70d6700de8..64c292383f 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -2058,6 +2058,28 @@ main (int argc, char *argv[]) diff -Nru grub2-2.04/debian/patches/grub-legacy-0-based-partitions.patch grub2-2.04/debian/patches/grub-legacy-0-based-partitions.patch --- grub2-2.04/debian/patches/grub-legacy-0-based-partitions.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/grub-legacy-0-based-partitions.patch 2021-02-11 16:22:32.000000000 +0000 @@ -13,7 +13,7 @@ 1 file changed, 14 insertions(+) diff --git a/util/getroot.c b/util/getroot.c -index 847406fba..cdd41153c 100644 +index 847406fbab..cdd41153c5 100644 --- a/util/getroot.c +++ b/util/getroot.c @@ -245,6 +245,20 @@ find_partition (grub_disk_t dsk __attribute__ ((unused)), diff -Nru grub2-2.04/debian/patches/ieee1275-clear-reset.patch grub2-2.04/debian/patches/ieee1275-clear-reset.patch --- grub2-2.04/debian/patches/ieee1275-clear-reset.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ieee1275-clear-reset.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 8bec2a413fc7fe8f2a48d37d8127322ebc96971d Mon Sep 17 00:00:00 2001 +From 4ac72abaf4d300b357919e8a9eb47fb9575988cf Mon Sep 17 00:00:00 2001 From: Paulo Flabiano Smorigo Date: Thu, 25 Sep 2014 18:41:29 -0300 Subject: Include a text attribute reset in the clear command for ppc @@ -18,7 +18,7 @@ 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grub-core/term/terminfo.c b/grub-core/term/terminfo.c -index d317efa36..63892ad42 100644 +index d317efa368..63892ad427 100644 --- a/grub-core/term/terminfo.c +++ b/grub-core/term/terminfo.c @@ -151,7 +151,7 @@ grub_terminfo_set_current (struct grub_term_output *term, diff -Nru grub2-2.04/debian/patches/ignore-grub_func_test-failures.patch grub2-2.04/debian/patches/ignore-grub_func_test-failures.patch --- grub2-2.04/debian/patches/ignore-grub_func_test-failures.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ignore-grub_func_test-failures.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From a4eaed2b739501db9b1009cd778fc72e9670f9ce Mon Sep 17 00:00:00 2001 +From d0d80daa3c2a6620ef62d32ac3abac2d9e02c8ee Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:32 +0000 Subject: Ignore functional test failures for now as they are broken @@ -14,7 +14,7 @@ 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/grub_func_test.in b/tests/grub_func_test.in -index c67f9e422..728cd6e06 100644 +index c67f9e4225..728cd6e066 100644 --- a/tests/grub_func_test.in +++ b/tests/grub_func_test.in @@ -16,6 +16,8 @@ out=`echo all_functional_test | @builddir@/grub-shell --timeout=3600 --files="/b diff -Nru grub2-2.04/debian/patches/insmod-xzio-and-lzopio-on-xen.patch grub2-2.04/debian/patches/insmod-xzio-and-lzopio-on-xen.patch --- grub2-2.04/debian/patches/insmod-xzio-and-lzopio-on-xen.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/insmod-xzio-and-lzopio-on-xen.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From c58c9d77ccd16511db098247b5cbba5abcaac99f Mon Sep 17 00:00:00 2001 +From a45af0be1963f94dd9ea5a30796d2e371fc6cfd4 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Sun, 30 Nov 2014 12:12:52 +0000 Subject: Arrange to insmod xzio and lzopio when booting a kernel as a Xen @@ -21,7 +21,7 @@ 2 files changed, 2 insertions(+) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index 2c418c5ec..85b30084a 100644 +index 2c418c5ec8..85b30084ad 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -166,6 +166,7 @@ linux_entry () @@ -33,10 +33,10 @@ if [ x$dirname = x/ ]; then if [ -z "${prepare_root_cache}" ]; then diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index 4477fa606..4c48abef0 100755 +index 4bacf6e2c2..735b46af65 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in -@@ -838,6 +838,7 @@ zfs_linux_entry () { +@@ -854,6 +854,7 @@ zfs_linux_entry () { fi echo "${submenu_indentation} insmod gzio" diff -Nru grub2-2.04/debian/patches/install-efi-fallback.patch grub2-2.04/debian/patches/install-efi-fallback.patch --- grub2-2.04/debian/patches/install-efi-fallback.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/install-efi-fallback.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 8a5b764a450f0d67f940c2ffbe80eae053753c19 Mon Sep 17 00:00:00 2001 +From b58f3835ad1edaac665bcf8cf0ac73c0026be3ee Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:05 +0000 Subject: Fall back to non-EFI if booted using EFI but -efi is missing @@ -19,7 +19,7 @@ 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/grub-core/osdep/linux/platform.c b/grub-core/osdep/linux/platform.c -index e28a79dab..2e7f72086 100644 +index e28a79dab3..2e7f720869 100644 --- a/grub-core/osdep/linux/platform.c +++ b/grub-core/osdep/linux/platform.c @@ -19,10 +19,12 @@ diff -Nru grub2-2.04/debian/patches/install-efi-ubuntu-flavours.patch grub2-2.04/debian/patches/install-efi-ubuntu-flavours.patch --- grub2-2.04/debian/patches/install-efi-ubuntu-flavours.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/install-efi-ubuntu-flavours.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 73faf5c430fe03ec081a838af0e96ad4c42ab26f Mon Sep 17 00:00:00 2001 +From 6640902c6ef375315f2e1a2d513bc3777fcba90e Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:27 +0000 Subject: Cope with Kubuntu setting GRUB_DISTRIBUTOR @@ -17,7 +17,7 @@ 1 file changed, 2 insertions(+) diff --git a/util/grub-install.c b/util/grub-install.c -index e1e40cf2b..f0d59c180 100644 +index e1e40cf2b5..f0d59c1809 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -1115,6 +1115,8 @@ main (int argc, char *argv[]) diff -Nru grub2-2.04/debian/patches/install-locale-langpack.patch grub2-2.04/debian/patches/install-locale-langpack.patch --- grub2-2.04/debian/patches/install-locale-langpack.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/install-locale-langpack.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 50921522fab0f4ce529b6c7acd6354b1b3cff2b1 Mon Sep 17 00:00:00 2001 +From 2c06e4070f9cdfdf96cfac02ea7a3feb0111c448 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:07 +0000 Subject: Prefer translations from Ubuntu language packs if available @@ -13,7 +13,7 @@ 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/util/grub-install-common.c b/util/grub-install-common.c -index ca0ac612a..fdfe2c7ea 100644 +index ca0ac612ac..fdfe2c7ead 100644 --- a/util/grub-install-common.c +++ b/util/grub-install-common.c @@ -609,17 +609,25 @@ get_localedir (void) diff -Nru grub2-2.04/debian/patches/install-powerpc-machtypes.patch grub2-2.04/debian/patches/install-powerpc-machtypes.patch --- grub2-2.04/debian/patches/install-powerpc-machtypes.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/install-powerpc-machtypes.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 2b3e762ebb12ce0d5a562dd36d23bca5d78aa61c Mon Sep 17 00:00:00 2001 +From 0d9799ac663e048bb719a685fc9a4f717afa8084 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Tue, 28 Jan 2014 14:40:02 +0000 Subject: Port yaboot logic for various powerpc machine types @@ -25,7 +25,7 @@ 6 files changed, 119 insertions(+), 6 deletions(-) diff --git a/grub-core/osdep/basic/platform.c b/grub-core/osdep/basic/platform.c -index a7dafd85a..6c293ed2d 100644 +index a7dafd85a9..6c293ed2d0 100644 --- a/grub-core/osdep/basic/platform.c +++ b/grub-core/osdep/basic/platform.c @@ -30,3 +30,8 @@ grub_install_get_default_x86_platform (void) @@ -38,7 +38,7 @@ + return "generic"; +} diff --git a/grub-core/osdep/linux/platform.c b/grub-core/osdep/linux/platform.c -index 2e7f72086..5b37366d4 100644 +index 2e7f720869..5b37366d4d 100644 --- a/grub-core/osdep/linux/platform.c +++ b/grub-core/osdep/linux/platform.c @@ -24,6 +24,7 @@ @@ -125,7 +125,7 @@ + return machtype; +} diff --git a/grub-core/osdep/unix/platform.c b/grub-core/osdep/unix/platform.c -index 55b8f4016..9c439326a 100644 +index 55b8f40162..9c439326a0 100644 --- a/grub-core/osdep/unix/platform.c +++ b/grub-core/osdep/unix/platform.c @@ -218,13 +218,29 @@ grub_install_register_ieee1275 (int is_prep, const char *install_device, @@ -165,7 +165,7 @@ free (boot_device); diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c -index 7eb53fe01..e19a3d9a8 100644 +index 7eb53fe01b..e19a3d9a8a 100644 --- a/grub-core/osdep/windows/platform.c +++ b/grub-core/osdep/windows/platform.c @@ -128,6 +128,12 @@ grub_install_get_default_x86_platform (void) @@ -182,7 +182,7 @@ get_efi_variable (const wchar_t *varname, ssize_t *len) { diff --git a/include/grub/util/install.h b/include/grub/util/install.h -index 2631b1074..8aeb5c4f2 100644 +index 2631b10745..8aeb5c4f20 100644 --- a/include/grub/util/install.h +++ b/include/grub/util/install.h @@ -216,6 +216,9 @@ grub_install_get_default_arm_platform (void); @@ -196,7 +196,7 @@ grub_install_register_efi (grub_device_t efidir_grub_dev, const char *efifile_path, diff --git a/util/grub-install.c b/util/grub-install.c -index f0d59c180..70d6700de 100644 +index f0d59c1809..70d6700de8 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -1177,7 +1177,18 @@ main (int argc, char *argv[]) diff -Nru grub2-2.04/debian/patches/install-stage2-confusion.patch grub2-2.04/debian/patches/install-stage2-confusion.patch --- grub2-2.04/debian/patches/install-stage2-confusion.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/install-stage2-confusion.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From bd93043d187b87d8faa11135f3414d67da95a167 Mon Sep 17 00:00:00 2001 +From 339a65e413f0e6e14c41548ebdd1ce6203c41651 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:12:58 +0000 Subject: If GRUB Legacy is still around, tell packaging to ignore it @@ -13,7 +13,7 @@ 1 file changed, 14 insertions(+) diff --git a/util/grub-install.c b/util/grub-install.c -index 8a55ad4b8..3b4606eef 100644 +index 8a55ad4b8d..3b4606eef1 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -42,6 +42,7 @@ diff -Nru grub2-2.04/debian/patches/maybe-quiet.patch grub2-2.04/debian/patches/maybe-quiet.patch --- grub2-2.04/debian/patches/maybe-quiet.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/maybe-quiet.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 139c9faecee68370e4b46d50ca51d0524029212c Mon Sep 17 00:00:00 2001 +From 4eeef764f36e4aa0b98af635024b33abec76aa0f Mon Sep 17 00:00:00 2001 From: Didier Roche Date: Tue, 31 Mar 2020 15:20:15 +0200 Subject: Add configure option to reduce visual clutter at boot time @@ -47,7 +47,7 @@ 10 files changed, 118 insertions(+), 8 deletions(-) diff --git a/config.h.in b/config.h.in -index 9e8f9911b..d2c4ce8e5 100644 +index 9e8f9911b1..d2c4ce8e51 100644 --- a/config.h.in +++ b/config.h.in @@ -12,6 +12,8 @@ @@ -60,7 +60,7 @@ /* We don't need those. */ #define MINILZO_CFG_SKIP_LZO_PTR 1 diff --git a/configure.ac b/configure.ac -index 1e5abc67d..ea00ccd69 100644 +index 1e5abc67d9..ea00ccd691 100644 --- a/configure.ac +++ b/configure.ac @@ -1857,6 +1857,17 @@ else @@ -93,7 +93,7 @@ echo "*******************************************************" ] diff --git a/grub-core/boot/i386/pc/boot.S b/grub-core/boot/i386/pc/boot.S -index 2bd0b2d28..b0c0f2225 100644 +index 2bd0b2d286..b0c0f2225e 100644 --- a/grub-core/boot/i386/pc/boot.S +++ b/grub-core/boot/i386/pc/boot.S @@ -19,6 +19,9 @@ @@ -125,7 +125,7 @@ movw $disk_address_packet, %si diff --git a/grub-core/boot/i386/pc/diskboot.S b/grub-core/boot/i386/pc/diskboot.S -index c1addc0df..9b6d7a7ed 100644 +index c1addc0df2..9b6d7a7edc 100644 --- a/grub-core/boot/i386/pc/diskboot.S +++ b/grub-core/boot/i386/pc/diskboot.S @@ -18,6 +18,9 @@ @@ -205,7 +205,7 @@ notification_step: .asciz "." diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c -index 9cad0c448..714b63d67 100644 +index 9cad0c4485..714b63d674 100644 --- a/grub-core/kern/main.c +++ b/grub-core/kern/main.c @@ -264,15 +264,25 @@ reclaim_module_space (void) @@ -248,7 +248,7 @@ grub_rescue_run (); } diff --git a/grub-core/kern/rescue_reader.c b/grub-core/kern/rescue_reader.c -index dcd7d4439..a93524eab 100644 +index dcd7d44397..a93524eabb 100644 --- a/grub-core/kern/rescue_reader.c +++ b/grub-core/kern/rescue_reader.c @@ -78,7 +78,9 @@ grub_rescue_read_line (char **line, int cont, @@ -262,7 +262,7 @@ while (1) { diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c -index 1b03dfd57..0aa389fa1 100644 +index 1b03dfd57b..0aa389fa16 100644 --- a/grub-core/normal/main.c +++ b/grub-core/normal/main.c @@ -389,6 +389,15 @@ static grub_err_t @@ -292,7 +292,7 @@ while (1) { diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c -index 3611ee9ea..ebf5a0f10 100644 +index 3611ee9ea7..ebf5a0f109 100644 --- a/grub-core/normal/menu.c +++ b/grub-core/normal/menu.c @@ -827,12 +827,18 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot) @@ -339,7 +339,7 @@ if (auto_boot) grub_menu_execute_with_fallback (menu, e, autobooted, diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index cb1cc200e..479a8bf4e 100644 +index cb1cc200e4..479a8bf4e5 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -21,6 +21,7 @@ prefix="@prefix@" @@ -386,7 +386,7 @@ EOF fi diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index bd4f1a212..3a0e6d103 100755 +index 511c182944..caead8a0c2 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in @@ -20,6 +20,7 @@ set -e @@ -397,7 +397,7 @@ . "${pkgdatadir}/grub-mkconfig_lib" -@@ -779,7 +780,9 @@ zfs_linux_entry () { +@@ -795,7 +796,9 @@ zfs_linux_entry () { echo "$(prepare_grub_to_access_device_cached "${boot_device}" "${submenu_level}")" @@ -408,14 +408,14 @@ linux_default_args="${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" if [ ${type} = "recovery" ]; then -@@ -788,7 +791,9 @@ zfs_linux_entry () { - - echo "${submenu_indentation} linux ${kernel} root=ZFS=${dataset} ro ${linux_default_args} ${kernel_additional_args}" +@@ -805,7 +808,9 @@ zfs_linux_entry () { + # echo in echo trims end of line spaces + echo "${submenu_indentation} linux \"${kernel}\" root=ZFS=\"${dataset}\" ro $(echo ${linux_default_args} ${kernel_additional_args})" - echo "${submenu_indentation} echo '$(gettext_printf "Loading initial ramdisk ..." | grub_quote)'" + if [ "${quiet_boot}" = 0 ] || [ "${type}" != simple ]; then + echo "${submenu_indentation} echo '$(gettext_printf "Loading initial ramdisk ..." | grub_quote)'" + fi - echo "${submenu_indentation} initrd ${initrd}" + echo "${submenu_indentation} initrd \"${initrd}\"" echo "${submenu_indentation}}" } diff -Nru grub2-2.04/debian/patches/mkconfig-loopback.patch grub2-2.04/debian/patches/mkconfig-loopback.patch --- grub2-2.04/debian/patches/mkconfig-loopback.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/mkconfig-loopback.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 3883a00c8f4a4f59b6a677622776d5bf51337b65 Mon Sep 17 00:00:00 2001 +From ce20933b52d3dea2ea1ba3291a960246135ecf51 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:00 +0000 Subject: Handle filesystems loop-mounted on file images @@ -21,7 +21,7 @@ 3 files changed, 34 insertions(+) diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in -index b6606c16e..b05df554d 100644 +index b6606c16e0..b05df554da 100644 --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in @@ -133,6 +133,22 @@ prepare_grub_to_access_device () @@ -63,7 +63,7 @@ grub_get_device_id () diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index f839b3b55..d927b60ae 100644 +index f839b3b55f..d927b60ae2 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -40,6 +40,11 @@ fi @@ -79,7 +79,7 @@ esac diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in -index 96179ea61..9a8d42fb5 100644 +index 96179ea613..9a8d42fb57 100644 --- a/util/grub.d/20_linux_xen.in +++ b/util/grub.d/20_linux_xen.in @@ -40,6 +40,11 @@ fi diff -Nru grub2-2.04/debian/patches/mkconfig-mid-upgrade.patch grub2-2.04/debian/patches/mkconfig-mid-upgrade.patch --- grub2-2.04/debian/patches/mkconfig-mid-upgrade.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/mkconfig-mid-upgrade.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 16f168810740a2fd3defa4856ead7b8ded2d1fb5 Mon Sep 17 00:00:00 2001 +From 6239ec925ac05ee2841851bb7f863cfff9ffc8e9 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:03 +0000 Subject: Bail out if trying to run grub-mkconfig during upgrade to 2.00 @@ -20,7 +20,7 @@ 1 file changed, 7 insertions(+) diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in -index 45cd4cc54..b506d63bf 100644 +index 45cd4cc541..b506d63bf9 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -102,6 +102,13 @@ do diff -Nru grub2-2.04/debian/patches/mkconfig-nonexistent-loopback.patch grub2-2.04/debian/patches/mkconfig-nonexistent-loopback.patch --- grub2-2.04/debian/patches/mkconfig-nonexistent-loopback.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/mkconfig-nonexistent-loopback.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 0a12aab871f0e938738305d89fc1e32915ea7fda Mon Sep 17 00:00:00 2001 +From ab207432e5c23421042d5f7b1216562ea176158a Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:08 +0000 Subject: Avoid getting confused by inaccessible loop device backing paths @@ -14,7 +14,7 @@ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in -index b05df554d..fe6319abe 100644 +index b05df554da..fe6319abe0 100644 --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in @@ -143,7 +143,7 @@ prepare_grub_to_access_device () @@ -27,7 +27,7 @@ esac ;; diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in -index 775ceb2e0..b7e1147c4 100644 +index 775ceb2e04..b7e1147c41 100644 --- a/util/grub.d/30_os-prober.in +++ b/util/grub.d/30_os-prober.in @@ -219,6 +219,11 @@ EOF diff -Nru grub2-2.04/debian/patches/mkconfig-other-inits.patch grub2-2.04/debian/patches/mkconfig-other-inits.patch --- grub2-2.04/debian/patches/mkconfig-other-inits.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/mkconfig-other-inits.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 22359dec23434867f467cb704aa771fd63e5ecd9 Mon Sep 17 00:00:00 2001 +From 89aa947724168bf12c4f08171973f970f99c9f23 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Sat, 3 Jan 2015 12:04:59 +0000 Subject: Generate alternative init entries in advanced menu @@ -18,7 +18,7 @@ 2 files changed, 21 insertions(+) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index 85b30084a..dff84edea 100644 +index 85b30084ad..dff84edea5 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -32,6 +32,7 @@ export TEXTDOMAIN=@PACKAGE@ @@ -53,7 +53,7 @@ linux_entry "${OS}" "${version}" recovery \ "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}" diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in -index f2ee0532b..81e5f0d7e 100644 +index f2ee0532bd..81e5f0d7e4 100644 --- a/util/grub.d/20_linux_xen.in +++ b/util/grub.d/20_linux_xen.in @@ -27,6 +27,7 @@ export TEXTDOMAIN=@PACKAGE@ diff -Nru grub2-2.04/debian/patches/mkconfig-recovery-title.patch grub2-2.04/debian/patches/mkconfig-recovery-title.patch --- grub2-2.04/debian/patches/mkconfig-recovery-title.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/mkconfig-recovery-title.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From cc1216264113d2471a5ee5d472358e265fde1ab5 Mon Sep 17 00:00:00 2001 +From bbdf64ee17c9ac16e3ba96e91e0bfa94b8618642 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:33 +0000 Subject: Add GRUB_RECOVERY_TITLE option @@ -22,7 +22,7 @@ 8 files changed, 21 insertions(+), 11 deletions(-) diff --git a/docs/grub.texi b/docs/grub.texi -index a835d0ae4..3ec35d315 100644 +index a835d0ae42..3ec35d315a 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -1536,6 +1536,11 @@ a console is restricted or limited. @@ -38,7 +38,7 @@ The following options are still accepted for compatibility with existing diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in -index 307214310..9c1da6477 100644 +index 3072143105..9c1da64771 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -196,6 +196,10 @@ GRUB_ACTUAL_DEFAULT="$GRUB_DEFAULT" @@ -63,7 +63,7 @@ if test "x${grub_cfg}" != "x"; then rm -f "${grub_cfg}.new" diff --git a/util/grub.d/10_hurd.in b/util/grub.d/10_hurd.in -index 59a9a48a2..7fa3a3fbd 100644 +index 59a9a48a2f..7fa3a3fbd8 100644 --- a/util/grub.d/10_hurd.in +++ b/util/grub.d/10_hurd.in @@ -88,8 +88,8 @@ hurd_entry () { @@ -78,7 +78,7 @@ title="$(gettext_printf "%s, with Hurd %s" "${OS}" "${kernel_base}")" oldtitle="$OS using $kernel_base" diff --git a/util/grub.d/10_kfreebsd.in b/util/grub.d/10_kfreebsd.in -index 9d8e8fd85..8301d361a 100644 +index 9d8e8fd852..8301d361a1 100644 --- a/util/grub.d/10_kfreebsd.in +++ b/util/grub.d/10_kfreebsd.in @@ -76,7 +76,7 @@ kfreebsd_entry () @@ -91,7 +91,7 @@ title="$(gettext_printf "%s, with kFreeBSD %s" "${os}" "${version}")" fi diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index cc2dd855a..2c418c5ec 100644 +index cc2dd855ab..2c418c5ec8 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -130,7 +130,7 @@ linux_entry () @@ -104,10 +104,10 @@ title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;; esac diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index 48a4e6897..4477fa606 100755 +index 055a542346..4bacf6e2c2 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in -@@ -957,7 +957,7 @@ generate_grub_menu() { +@@ -974,7 +974,7 @@ generate_grub_menu() { GRUB_DISABLE_RECOVERY=${GRUB_DISABLE_RECOVERY:-} if [ "${GRUB_DISABLE_RECOVERY}" != "true" ]; then @@ -116,7 +116,7 @@ zfs_linux_entry 1 "${title}" "recovery" "${dataset}" "${device}" "${initrd}" "${kernel}" fi at_least_one_entry=1 -@@ -985,9 +985,9 @@ generate_grub_menu() { +@@ -1002,9 +1002,9 @@ generate_grub_menu() { GRUB_DISABLE_RECOVERY="${GRUB_DISABLE_RECOVERY:-}" if [ "${GRUB_DISABLE_RECOVERY}" != "true" ]; then @@ -128,7 +128,7 @@ zfs_linux_entry 2 "${title}" "recovery" "${dataset}" "${device}" "${initrd}" "${kernel}" "zsys-revert=userdata" fi # Non-zsys: boot temporarly on snapshots or rollback (destroying intermediate snapshots) -@@ -997,7 +997,7 @@ generate_grub_menu() { +@@ -1014,7 +1014,7 @@ generate_grub_menu() { GRUB_DISABLE_RECOVERY="${GRUB_DISABLE_RECOVERY:-}" if [ "${GRUB_DISABLE_RECOVERY}" != "true" ]; then @@ -138,7 +138,7 @@ fi diff --git a/util/grub.d/10_netbsd.in b/util/grub.d/10_netbsd.in -index 874f59969..bb29cc046 100644 +index 874f59969e..bb29cc0468 100644 --- a/util/grub.d/10_netbsd.in +++ b/util/grub.d/10_netbsd.in @@ -102,7 +102,7 @@ netbsd_entry () @@ -151,7 +151,7 @@ title="$(gettext_printf "%s, with kernel %s (via %s)" "${OS}" "$(echo ${kernel} | sed -e 's,^.*/,,')" "${loader}")" fi diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in -index 9a8d42fb5..f2ee0532b 100644 +index 9a8d42fb57..f2ee0532bd 100644 --- a/util/grub.d/20_linux_xen.in +++ b/util/grub.d/20_linux_xen.in @@ -105,7 +105,7 @@ linux_entry () diff -Nru grub2-2.04/debian/patches/mkconfig-signed-kernel.patch grub2-2.04/debian/patches/mkconfig-signed-kernel.patch --- grub2-2.04/debian/patches/mkconfig-signed-kernel.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/mkconfig-signed-kernel.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 16c328eee53e3fe8c24db8c2438a7410755c58db Mon Sep 17 00:00:00 2001 +From 959cc3f8d5f0316fcf691d7933679f44deacea64 Mon Sep 17 00:00:00 2001 From: Didier Roche Date: Tue, 31 Mar 2020 15:17:45 +0200 Subject: Generate configuration for signed UEFI kernels if available @@ -13,7 +13,7 @@ 2 files changed, 36 insertions(+) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index 19e4df4ad..cb1cc200e 100644 +index 19e4df4ad8..cb1cc200e4 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -165,8 +165,16 @@ linux_entry () @@ -48,7 +48,7 @@ basename=`basename $linux` dirname=`dirname $linux` diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index 7f88e771e..bd4f1a212 100755 +index 2149864f20..511c182944 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in @@ -339,6 +339,16 @@ try_default_layout_bpool() { @@ -68,7 +68,7 @@ # Given a filesystem or snapshot dataset, returns dataset|machine id|pretty name|last used # $1 is dataset we want information from # $2 is the temporary mount directory to use -@@ -412,6 +422,17 @@ get_dataset_info() { +@@ -421,6 +431,17 @@ get_dataset_info() { continue fi diff -Nru grub2-2.04/debian/patches/mkconfig-ubuntu-distributor.patch grub2-2.04/debian/patches/mkconfig-ubuntu-distributor.patch --- grub2-2.04/debian/patches/mkconfig-ubuntu-distributor.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/mkconfig-ubuntu-distributor.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 77ada294ae9feca7e4202f454ddf56245eee16bf Mon Sep 17 00:00:00 2001 +From c6a65a35584bc92ce5dda728687a022b779cd4c6 Mon Sep 17 00:00:00 2001 From: Mario Limonciello Date: Mon, 13 Jan 2014 12:13:14 +0000 Subject: Remove GNU/Linux from default distributor string for Ubuntu @@ -17,7 +17,7 @@ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index fcd303387..19e4df4ad 100644 +index fcd3033872..19e4df4ad8 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -32,7 +32,14 @@ CLASS="--class gnu-linux --class gnu --class os" @@ -37,10 +37,10 @@ fi diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index de4d21590..7f88e771e 100755 +index 302df63551..2149864f20 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in -@@ -790,7 +790,14 @@ generate_grub_menu() { +@@ -807,7 +807,14 @@ generate_grub_menu() { if [ "${GRUB_DISTRIBUTOR}" = "" ] ; then OS=GNU/Linux else diff -Nru grub2-2.04/debian/patches/mkconfig-ubuntu-recovery.patch grub2-2.04/debian/patches/mkconfig-ubuntu-recovery.patch --- grub2-2.04/debian/patches/mkconfig-ubuntu-recovery.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/mkconfig-ubuntu-recovery.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 51814873e68db3d990a080f705e6562ef140b416 Mon Sep 17 00:00:00 2001 +From 793ba0852b516e13976f0344e8be0ac20e694b8e Mon Sep 17 00:00:00 2001 From: Didier Roche Date: Tue, 31 Mar 2020 15:16:36 +0200 Subject: "single" -> "recovery" when friendly-recovery is installed @@ -24,7 +24,7 @@ 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac -index 7656f2434..1e5abc67d 100644 +index 7656f2434e..1e5abc67d9 100644 --- a/configure.ac +++ b/configure.ac @@ -1846,6 +1846,17 @@ fi @@ -46,7 +46,7 @@ AC_SUBST([FONT_SOURCE]) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index d927b60ae..fcd303387 100644 +index d927b60ae2..fcd3033872 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -20,6 +20,7 @@ set -e @@ -94,7 +94,7 @@ list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '` diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index b24587f0a..de4d21590 100755 +index d128b82323..302df63551 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in @@ -19,6 +19,7 @@ set -e @@ -105,7 +105,7 @@ . "${pkgdatadir}/grub-mkconfig_lib" -@@ -748,7 +749,9 @@ zfs_linux_entry () { +@@ -764,7 +765,9 @@ zfs_linux_entry () { if [ "${GRUB_GFXPAYLOAD_LINUX}" != "text" ]; then echo "${submenu_indentation} load_video" fi @@ -116,7 +116,7 @@ fi echo "${submenu_indentation} insmod gzio" -@@ -759,7 +762,7 @@ zfs_linux_entry () { +@@ -775,7 +778,7 @@ zfs_linux_entry () { linux_default_args="${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" if [ ${type} = "recovery" ]; then @@ -124,8 +124,8 @@ + linux_default_args="${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}" fi - echo "${submenu_indentation} linux ${kernel} root=ZFS=${dataset} ro ${linux_default_args} ${kernel_additional_args}" -@@ -791,6 +794,14 @@ generate_grub_menu() { + # echo in echo trims end of line spaces +@@ -808,6 +811,14 @@ generate_grub_menu() { CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1 | LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}" fi @@ -141,7 +141,7 @@ # IFS is set to TAB (ASCII 0x09) echo "${menu_metadata}" | diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in -index 515a68c7a..775ceb2e0 100644 +index 515a68c7aa..775ceb2e04 100644 --- a/util/grub.d/30_os-prober.in +++ b/util/grub.d/30_os-prober.in @@ -220,7 +220,7 @@ EOF diff -Nru grub2-2.04/debian/patches/mkrescue-efi-modules.patch grub2-2.04/debian/patches/mkrescue-efi-modules.patch --- grub2-2.04/debian/patches/mkrescue-efi-modules.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/mkrescue-efi-modules.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 20edd1abb590756c35b886849a15d17d80f82170 Mon Sep 17 00:00:00 2001 +From cf8d1e376e2e5af6aa704cc113c9bbb7038e0253 Mon Sep 17 00:00:00 2001 From: Mario Limonciello Date: Mon, 13 Jan 2014 12:12:59 +0000 Subject: Build vfat into EFI boot images @@ -14,7 +14,7 @@ 1 file changed, 2 insertions(+) diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c -index ce2cbc4f1..45d6140d3 100644 +index ce2cbc4f10..45d6140d3e 100644 --- a/util/grub-mkrescue.c +++ b/util/grub-mkrescue.c @@ -750,6 +750,7 @@ main (int argc, char *argv[]) diff -Nru grub2-2.04/debian/patches/net-read-bracketed-ipv6-addr.patch grub2-2.04/debian/patches/net-read-bracketed-ipv6-addr.patch --- grub2-2.04/debian/patches/net-read-bracketed-ipv6-addr.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/net-read-bracketed-ipv6-addr.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 370386aaaed787b4b9082cd75f155f1b21350878 Mon Sep 17 00:00:00 2001 +From 8524df04e91b47acec4977616544ca30ed91ba64 Mon Sep 17 00:00:00 2001 From: Aaron Miller Date: Thu, 27 Oct 2016 17:39:49 -0400 Subject: net: read bracketed ipv6 addrs and port numbers @@ -16,7 +16,7 @@ 4 files changed, 110 insertions(+), 11 deletions(-) diff --git a/grub-core/net/http.c b/grub-core/net/http.c -index 5aa4ad3be..f182d7b87 100644 +index 5aa4ad3bef..f182d7b871 100644 --- a/grub-core/net/http.c +++ b/grub-core/net/http.c @@ -312,12 +312,14 @@ http_establish (struct grub_file *file, grub_off_t offset, int initial) @@ -74,7 +74,7 @@ file); if (!data->sock) diff --git a/grub-core/net/net.c b/grub-core/net/net.c -index d5d726a31..b917a75d5 100644 +index d5d726a315..b917a75d54 100644 --- a/grub-core/net/net.c +++ b/grub-core/net/net.c @@ -437,6 +437,12 @@ parse_ip6 (const char *val, grub_uint64_t *ip, const char **rest) @@ -211,7 +211,7 @@ } } diff --git a/grub-core/net/tftp.c b/grub-core/net/tftp.c -index 7d90bf66e..a0817a075 100644 +index 7d90bf66e7..a0817a075d 100644 --- a/grub-core/net/tftp.c +++ b/grub-core/net/tftp.c @@ -314,6 +314,7 @@ tftp_open (struct grub_file *file, const char *filename) @@ -241,7 +241,7 @@ if (!data->sock) { diff --git a/include/grub/net.h b/include/grub/net.h -index 4a9069a14..cc114286e 100644 +index 4a9069a147..cc114286ea 100644 --- a/include/grub/net.h +++ b/include/grub/net.h @@ -270,6 +270,7 @@ typedef struct grub_net diff -Nru grub2-2.04/debian/patches/no-devicetree-if-secure-boot.patch grub2-2.04/debian/patches/no-devicetree-if-secure-boot.patch --- grub2-2.04/debian/patches/no-devicetree-if-secure-boot.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/no-devicetree-if-secure-boot.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 7419d200192a1214872a70852200922529baa7b8 Mon Sep 17 00:00:00 2001 +From 024e855c1bda3d95db303447da2682abbeea52d5 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Wed, 24 Apr 2019 10:03:04 -0400 Subject: Forbid the "devicetree" command when Secure Boot is enabled. @@ -17,7 +17,7 @@ 2 files changed, 20 insertions(+) diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c -index 51684914c..092e8e307 100644 +index 51684914cf..092e8e3077 100644 --- a/grub-core/loader/arm/linux.c +++ b/grub-core/loader/arm/linux.c @@ -30,6 +30,10 @@ @@ -47,7 +47,7 @@ if (!dtb) return grub_errno; diff --git a/grub-core/loader/efi/fdt.c b/grub-core/loader/efi/fdt.c -index ee9c5592c..f0c2d91be 100644 +index ee9c5592c7..f0c2d91be2 100644 --- a/grub-core/loader/efi/fdt.c +++ b/grub-core/loader/efi/fdt.c @@ -123,6 +123,14 @@ grub_cmd_devicetree (grub_command_t cmd __attribute__ ((unused)), diff -Nru grub2-2.04/debian/patches/no-insmod-on-sb.patch grub2-2.04/debian/patches/no-insmod-on-sb.patch --- grub2-2.04/debian/patches/no-insmod-on-sb.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/no-insmod-on-sb.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From df8702b930179447a7ecaf8bb0f9842522967a41 Mon Sep 17 00:00:00 2001 +From 397e930e2efd7b64a56cf8f6332ea024b33352e6 Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Mon, 13 Jan 2014 12:13:09 +0000 Subject: Don't permit loading modules on UEFI secure boot @@ -16,7 +16,7 @@ 3 files changed, 42 insertions(+) diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c -index 48eb5e7b6..074dfc3c6 100644 +index 48eb5e7b62..074dfc3c6f 100644 --- a/grub-core/kern/dl.c +++ b/grub-core/kern/dl.c @@ -38,6 +38,10 @@ @@ -47,7 +47,7 @@ file = grub_file_open (filename, GRUB_FILE_TYPE_GRUB_MODULE); diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c -index 6e1ceb905..96204e39b 100644 +index 6e1ceb9051..96204e39b9 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -273,6 +273,34 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, @@ -86,7 +86,7 @@ /* Search the mods section from the PE32/PE32+ image. This code uses diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h -index e90e00dc4..a237952b3 100644 +index e90e00dc43..a237952b37 100644 --- a/include/grub/efi/efi.h +++ b/include/grub/efi/efi.h @@ -82,6 +82,7 @@ EXPORT_FUNC (grub_efi_set_variable) (const char *var, diff -Nru grub2-2.04/debian/patches/olpc-prefix-hack.patch grub2-2.04/debian/patches/olpc-prefix-hack.patch --- grub2-2.04/debian/patches/olpc-prefix-hack.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/olpc-prefix-hack.patch 2021-02-11 16:22:32.000000000 +0000 @@ -11,7 +11,7 @@ 1 file changed, 11 insertions(+) diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c -index d483e35ee..8b089b48d 100644 +index d483e35eed..8b089b48d0 100644 --- a/grub-core/kern/ieee1275/init.c +++ b/grub-core/kern/ieee1275/init.c @@ -76,6 +76,7 @@ grub_exit (void) diff -Nru grub2-2.04/debian/patches/ppc64el-disable-vsx.patch grub2-2.04/debian/patches/ppc64el-disable-vsx.patch --- grub2-2.04/debian/patches/ppc64el-disable-vsx.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ppc64el-disable-vsx.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 7736a6a5e58402b8f88d053ce2409b2d16262be5 Mon Sep 17 00:00:00 2001 +From 0e3a6ed6535ffffaf73d856e0ad09fbf9e1c49c8 Mon Sep 17 00:00:00 2001 From: Paulo Flabiano Smorigo Date: Thu, 25 Sep 2014 19:33:39 -0300 Subject: Disable VSX instruction @@ -21,7 +21,7 @@ 1 file changed, 12 insertions(+) diff --git a/grub-core/kern/powerpc/ieee1275/startup.S b/grub-core/kern/powerpc/ieee1275/startup.S -index 21c884b43..de9a9601a 100644 +index 21c884b433..de9a9601a9 100644 --- a/grub-core/kern/powerpc/ieee1275/startup.S +++ b/grub-core/kern/powerpc/ieee1275/startup.S @@ -20,6 +20,8 @@ diff -Nru grub2-2.04/debian/patches/probe-fusionio.patch grub2-2.04/debian/patches/probe-fusionio.patch --- grub2-2.04/debian/patches/probe-fusionio.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/probe-fusionio.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From c89a80f695775566c7f184ec19b4ad34f58906bb Mon Sep 17 00:00:00 2001 +From ee488b5b53a22883e0a8ec6b6805f6d059a2f56f Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:31 +0000 Subject: Probe FusionIO devices @@ -14,7 +14,7 @@ 2 files changed, 32 insertions(+) diff --git a/grub-core/osdep/linux/getroot.c b/grub-core/osdep/linux/getroot.c -index 90d92d3ad..7adc0f30e 100644 +index 90d92d3ad5..7adc0f30ee 100644 --- a/grub-core/osdep/linux/getroot.c +++ b/grub-core/osdep/linux/getroot.c @@ -950,6 +950,19 @@ grub_util_part_to_disk (const char *os_dev, struct stat *st, @@ -38,7 +38,7 @@ return path; diff --git a/util/deviceiter.c b/util/deviceiter.c -index a4971ef42..dddc50da7 100644 +index a4971ef429..dddc50da7a 100644 --- a/util/deviceiter.c +++ b/util/deviceiter.c @@ -383,6 +383,12 @@ get_nvme_disk_name (char *name, int controller, int namespace) diff -Nru grub2-2.04/debian/patches/quick-boot-lvm.patch grub2-2.04/debian/patches/quick-boot-lvm.patch --- grub2-2.04/debian/patches/quick-boot-lvm.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/quick-boot-lvm.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 193f060dd7c98d850e81a0b73383ff19c4374d64 Mon Sep 17 00:00:00 2001 +From ff0377e2c0d02fc0751cf87c0e5ddb7046e44458 Mon Sep 17 00:00:00 2001 From: Steve Langasek Date: Tue, 30 Oct 2018 15:04:16 -0700 Subject: If we don't have writable grubenv and we're on EFI, always show the @@ -26,7 +26,7 @@ 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in -index 674a76140..b7135b655 100644 +index 674a761402..b7135b655f 100644 --- a/util/grub.d/00_header.in +++ b/util/grub.d/00_header.in @@ -115,7 +115,7 @@ EOF diff -Nru grub2-2.04/debian/patches/quick-boot.patch grub2-2.04/debian/patches/quick-boot.patch --- grub2-2.04/debian/patches/quick-boot.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/quick-boot.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From a34a2ebb74968f6a460fd0f90c545f3e847a3411 Mon Sep 17 00:00:00 2001 +From 98d8dd28e493b11d45f22b10de2568689c2b6c37 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:28 +0000 Subject: Add configure option to bypass boot menu if possible @@ -34,7 +34,7 @@ 8 files changed, 146 insertions(+), 13 deletions(-) diff --git a/configure.ac b/configure.ac -index ea00ccd69..7dda5bb32 100644 +index ea00ccd691..7dda5bb32b 100644 --- a/configure.ac +++ b/configure.ac @@ -1868,6 +1868,17 @@ else @@ -56,7 +56,7 @@ AC_SUBST([FONT_SOURCE]) diff --git a/docs/grub.texi b/docs/grub.texi -index 87795075a..a835d0ae4 100644 +index 87795075a8..a835d0ae42 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -1522,6 +1522,20 @@ This option may be set to a list of GRUB module names separated by spaces. @@ -81,7 +81,7 @@ The following options are still accepted for compatibility with existing diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c -index ebf5a0f10..42c82290d 100644 +index ebf5a0f109..42c82290de 100644 --- a/grub-core/normal/menu.c +++ b/grub-core/normal/menu.c @@ -604,6 +604,30 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot) @@ -116,7 +116,7 @@ { pos = grub_term_save_pos (); diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in -index d18bf972f..307214310 100644 +index d18bf972f7..3072143105 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -250,7 +250,8 @@ export GRUB_DEFAULT \ @@ -130,7 +130,7 @@ if test "x${grub_cfg}" != "x"; then rm -f "${grub_cfg}.new" diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in -index 93a90233e..674a76140 100644 +index 93a90233ea..674a761402 100644 --- a/util/grub.d/00_header.in +++ b/util/grub.d/00_header.in @@ -21,6 +21,8 @@ prefix="@prefix@" @@ -259,7 +259,7 @@ EOF } diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index 479a8bf4e..2be66c702 100644 +index 479a8bf4e5..2be66c7028 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -22,6 +22,7 @@ exec_prefix="@exec_prefix@" @@ -281,7 +281,7 @@ save_default_entry | grub_add_tab fi diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index 3a0e6d103..ec4b49d9d 100755 +index caead8a0c2..5aedc6cd83 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in @@ -21,6 +21,7 @@ prefix="@prefix@" @@ -292,7 +292,7 @@ . "${pkgdatadir}/grub-mkconfig_lib" -@@ -755,6 +756,10 @@ zfs_linux_entry () { +@@ -771,6 +772,10 @@ zfs_linux_entry () { echo "${submenu_indentation}menuentry '$(echo "${title}" | grub_quote)' ${CLASS} \${menuentry_id_option} 'gnulinux-${dataset}-${kernel_version}' {" @@ -304,7 +304,7 @@ GRUB_SAVEDEFAULT=${GRUB_SAVEDEFAULT:-} default_entry="$(save_default_entry)" diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in -index 271044f59..da5f28876 100644 +index 271044f592..da5f28876d 100644 --- a/util/grub.d/30_os-prober.in +++ b/util/grub.d/30_os-prober.in @@ -20,12 +20,26 @@ set -e diff -Nru grub2-2.04/debian/patches/restore-mkdevicemap.patch grub2-2.04/debian/patches/restore-mkdevicemap.patch --- grub2-2.04/debian/patches/restore-mkdevicemap.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/restore-mkdevicemap.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 9e77654bae1ee822ee7ae4e90e5f043105388ee4 Mon Sep 17 00:00:00 2001 +From 36361f622c746acce148b9304e20c72a073fdaf0 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:01 +0000 Subject: Restore grub-mkdevicemap @@ -28,7 +28,7 @@ create mode 100644 util/grub-mkdevicemap.c diff --git a/Makefile.util.def b/Makefile.util.def -index bac85e284..eec1924b0 100644 +index bac85e2840..eec1924b0e 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -324,6 +324,23 @@ program = { @@ -57,7 +57,7 @@ installdir = sbin; diff --git a/docs/man/grub-mkdevicemap.h2m b/docs/man/grub-mkdevicemap.h2m new file mode 100644 -index 000000000..96cd6ee72 +index 0000000000..96cd6ee723 --- /dev/null +++ b/docs/man/grub-mkdevicemap.h2m @@ -0,0 +1,4 @@ @@ -67,7 +67,7 @@ +.BR grub-probe (8) diff --git a/include/grub/util/deviceiter.h b/include/grub/util/deviceiter.h new file mode 100644 -index 000000000..85374978c +index 0000000000..85374978c5 --- /dev/null +++ b/include/grub/util/deviceiter.h @@ -0,0 +1,14 @@ @@ -87,7 +87,7 @@ +#endif /* ! GRUB_DEVICEITER_MACHINE_UTIL_HEADER */ diff --git a/util/deviceiter.c b/util/deviceiter.c new file mode 100644 -index 000000000..a4971ef42 +index 0000000000..a4971ef429 --- /dev/null +++ b/util/deviceiter.c @@ -0,0 +1,1021 @@ @@ -1114,7 +1114,7 @@ +} diff --git a/util/devicemap.c b/util/devicemap.c new file mode 100644 -index 000000000..c61864420 +index 0000000000..c61864420a --- /dev/null +++ b/util/devicemap.c @@ -0,0 +1,13 @@ @@ -1133,7 +1133,7 @@ +} diff --git a/util/grub-mkdevicemap.c b/util/grub-mkdevicemap.c new file mode 100644 -index 000000000..c4bbdbf69 +index 0000000000..c4bbdbf69c --- /dev/null +++ b/util/grub-mkdevicemap.c @@ -0,0 +1,181 @@ diff -Nru grub2-2.04/debian/patches/rhboot-f34-dont-use-int-for-efi-status.patch grub2-2.04/debian/patches/rhboot-f34-dont-use-int-for-efi-status.patch --- grub2-2.04/debian/patches/rhboot-f34-dont-use-int-for-efi-status.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/rhboot-f34-dont-use-int-for-efi-status.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,18 +1,16 @@ -From 91a4e544668a5f06c1eea3cdd43ba0669f4c77f6 Mon Sep 17 00:00:00 2001 +From b0ddb101577d1bd08311798587c4b678d82eaf3b Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 26 Jun 2017 12:44:59 -0400 Subject: don't use int for efi status (cherry picked from commit eee6d2db7e3a392b8fe134fa75a7e28c9ae8cda5) Patch-Name: rhboot-f34-dont-use-int-for-efi-status.patch -(cherry picked from commit 3a80091a585e71363cd4f62f93fd48e5631362d2) -(cherry picked from commit 979f0bab5ca055d6e1485718480c34cf7d708d89) --- grub-core/kern/efi/efi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c -index d4a4be57c..7cf003f71 100644 +index d4a4be57cb..7cf003f713 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -167,7 +167,7 @@ grub_reboot (void) diff -Nru grub2-2.04/debian/patches/rhboot-f34-efinet-also-use-the-firmware-acceleration-for-http.patch grub2-2.04/debian/patches/rhboot-f34-efinet-also-use-the-firmware-acceleration-for-http.patch --- grub2-2.04/debian/patches/rhboot-f34-efinet-also-use-the-firmware-acceleration-for-http.patch 1970-01-01 00:00:00.000000000 +0000 +++ grub2-2.04/debian/patches/rhboot-f34-efinet-also-use-the-firmware-acceleration-for-http.patch 2021-02-11 16:22:35.000000000 +0000 @@ -0,0 +1,27 @@ +From c4b4731148734ba67f02ed8fa252d58e4da84999 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 30 Jul 2018 14:06:42 -0400 +Subject: efinet: also use the firmware acceleration for http + +Signed-off-by: Peter Jones + +Patch-Name: rhboot-f34-efinet-also-use-the-firmware-acceleration-for-http.patch +--- + grub-core/net/efi/net.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/grub-core/net/efi/net.c b/grub-core/net/efi/net.c +index 7aece1425b..c6e66596bf 100644 +--- a/grub-core/net/efi/net.c ++++ b/grub-core/net/efi/net.c +@@ -1336,7 +1336,9 @@ grub_efi_net_boot_from_https (void) + && (subtype == GRUB_EFI_URI_DEVICE_PATH_SUBTYPE)) + { + grub_efi_uri_device_path_t *uri_dp = (grub_efi_uri_device_path_t *) dp; +- return (grub_strncmp ((const char*)uri_dp->uri, "https://", sizeof ("https://") - 1) == 0) ? 1 : 0; ++ grub_dprintf ("efinet", "url:%s\n", (const char *)uri_dp->uri); ++ return (grub_strncmp ((const char *)uri_dp->uri, "https://", sizeof ("https://") - 1) == 0 || ++ grub_strncmp ((const char *)uri_dp->uri, "http://", sizeof ("http://") - 1) == 0); + } + + if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) diff -Nru grub2-2.04/debian/patches/rhboot-f34-make-exit-take-a-return-code.patch grub2-2.04/debian/patches/rhboot-f34-make-exit-take-a-return-code.patch --- grub2-2.04/debian/patches/rhboot-f34-make-exit-take-a-return-code.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/rhboot-f34-make-exit-take-a-return-code.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 0418941c03e187f40e5e28a09f349092ed34b726 Mon Sep 17 00:00:00 2001 +From c953a05d3af4a53eb217939355ac455045f26628 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Wed, 26 Feb 2014 21:49:12 -0500 Subject: Make "exit" take a return code. @@ -11,8 +11,6 @@ Signed-off-by: Peter Jones (cherry picked from commit ccce3d69ae3eacc7bdc70217304586bd7e74fe1e) Patch-Name: rhboot-f34-make-exit-take-a-return-code.patch -(cherry picked from commit f58cd1f3cf1cf8bf3ee5f57ae035a14888840448) -(cherry picked from commit eaa54045462a9993e2df8613ac7117760bbd5220) --- grub-core/commands/minicmd.c | 20 ++++++++++++++++---- grub-core/kern/efi/efi.c | 9 +++++++-- @@ -31,7 +29,7 @@ 14 files changed, 48 insertions(+), 21 deletions(-) diff --git a/grub-core/commands/minicmd.c b/grub-core/commands/minicmd.c -index 6bbce3128..6d66b7c45 100644 +index 6bbce3128c..6d66b7c453 100644 --- a/grub-core/commands/minicmd.c +++ b/grub-core/commands/minicmd.c @@ -179,12 +179,24 @@ grub_mini_cmd_lsmod (struct grub_command *cmd __attribute__ ((unused)), @@ -64,7 +62,7 @@ } diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c -index 88bbd34ea..d4a4be57c 100644 +index 88bbd34eac..d4a4be57cb 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -165,11 +165,16 @@ grub_reboot (void) @@ -87,7 +85,7 @@ } diff --git a/grub-core/kern/emu/main.c b/grub-core/kern/emu/main.c -index 425bb9603..55ea5a11c 100644 +index 425bb96034..55ea5a11cc 100644 --- a/grub-core/kern/emu/main.c +++ b/grub-core/kern/emu/main.c @@ -67,7 +67,7 @@ grub_reboot (void) @@ -100,7 +98,7 @@ grub_reboot (); } diff --git a/grub-core/kern/emu/misc.c b/grub-core/kern/emu/misc.c -index dfd8a8ec4..0ff13bcaf 100644 +index dfd8a8ec48..0ff13bcaf8 100644 --- a/grub-core/kern/emu/misc.c +++ b/grub-core/kern/emu/misc.c @@ -151,9 +151,10 @@ xasprintf (const char *fmt, ...) @@ -117,7 +115,7 @@ #endif diff --git a/grub-core/kern/i386/coreboot/init.c b/grub-core/kern/i386/coreboot/init.c -index 3314f027f..36f9134b7 100644 +index 3314f027fe..36f9134b7b 100644 --- a/grub-core/kern/i386/coreboot/init.c +++ b/grub-core/kern/i386/coreboot/init.c @@ -41,7 +41,7 @@ extern grub_uint8_t _end[]; @@ -130,7 +128,7 @@ /* We can't use grub_fatal() in this function. This would create an infinite loop, since grub_fatal() calls grub_abort() which in turn calls grub_exit(). */ diff --git a/grub-core/kern/i386/qemu/init.c b/grub-core/kern/i386/qemu/init.c -index 271b6fbfa..9fafe98f0 100644 +index 271b6fbfab..9fafe98f01 100644 --- a/grub-core/kern/i386/qemu/init.c +++ b/grub-core/kern/i386/qemu/init.c @@ -42,7 +42,7 @@ extern grub_uint8_t _end[]; @@ -143,7 +141,7 @@ /* We can't use grub_fatal() in this function. This would create an infinite loop, since grub_fatal() calls grub_abort() which in turn calls grub_exit(). */ diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c -index 8b089b48d..085a6a33f 100644 +index 8b089b48d0..085a6a33f8 100644 --- a/grub-core/kern/ieee1275/init.c +++ b/grub-core/kern/ieee1275/init.c @@ -71,7 +71,7 @@ grub_addr_t grub_ieee1275_original_stack; @@ -156,7 +154,7 @@ grub_ieee1275_exit (); } diff --git a/grub-core/kern/mips/arc/init.c b/grub-core/kern/mips/arc/init.c -index 3834a1490..86b3a25ec 100644 +index 3834a14909..86b3a25ec4 100644 --- a/grub-core/kern/mips/arc/init.c +++ b/grub-core/kern/mips/arc/init.c @@ -276,7 +276,7 @@ grub_halt (void) @@ -169,7 +167,7 @@ GRUB_ARC_FIRMWARE_VECTOR->exit (); diff --git a/grub-core/kern/mips/loongson/init.c b/grub-core/kern/mips/loongson/init.c -index 7b96531b9..dff598ca7 100644 +index 7b96531b98..dff598ca7b 100644 --- a/grub-core/kern/mips/loongson/init.c +++ b/grub-core/kern/mips/loongson/init.c @@ -304,7 +304,7 @@ grub_halt (void) @@ -182,7 +180,7 @@ grub_halt (); } diff --git a/grub-core/kern/mips/qemu_mips/init.c b/grub-core/kern/mips/qemu_mips/init.c -index be88b77d2..8b6c55ffc 100644 +index be88b77d22..8b6c55ffc0 100644 --- a/grub-core/kern/mips/qemu_mips/init.c +++ b/grub-core/kern/mips/qemu_mips/init.c @@ -75,7 +75,7 @@ grub_machine_fini (int flags __attribute__ ((unused))) @@ -195,7 +193,7 @@ grub_halt (); } diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c -index 83c068d61..e742f56d2 100644 +index 83c068d61b..e742f56d20 100644 --- a/grub-core/kern/misc.c +++ b/grub-core/kern/misc.c @@ -1098,9 +1098,18 @@ grub_abort (void) @@ -219,7 +217,7 @@ grub_fatal (const char *fmt, ...) { diff --git a/grub-core/kern/uboot/init.c b/grub-core/kern/uboot/init.c -index 3e338645c..be2a5be1d 100644 +index 3e338645c5..be2a5be1d0 100644 --- a/grub-core/kern/uboot/init.c +++ b/grub-core/kern/uboot/init.c @@ -39,9 +39,9 @@ extern grub_size_t grub_total_module_size; @@ -244,7 +242,7 @@ else if (ver > API_SIG_VERSION) { diff --git a/grub-core/kern/xen/init.c b/grub-core/kern/xen/init.c -index 782ca7295..708b060f3 100644 +index 782ca72952..708b060f32 100644 --- a/grub-core/kern/xen/init.c +++ b/grub-core/kern/xen/init.c @@ -584,7 +584,7 @@ grub_machine_init (void) @@ -257,7 +255,7 @@ struct sched_shutdown arg; diff --git a/include/grub/misc.h b/include/grub/misc.h -index ee48eb7a7..f9135b62e 100644 +index ee48eb7a72..f9135b62e3 100644 --- a/include/grub/misc.h +++ b/include/grub/misc.h @@ -334,7 +334,7 @@ int EXPORT_FUNC(grub_vsnprintf) (char *str, grub_size_t n, const char *fmt, diff -Nru grub2-2.04/debian/patches/rhboot-f34-make-pmtimer-tsc-calibration-fast.patch grub2-2.04/debian/patches/rhboot-f34-make-pmtimer-tsc-calibration-fast.patch --- grub2-2.04/debian/patches/rhboot-f34-make-pmtimer-tsc-calibration-fast.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/rhboot-f34-make-pmtimer-tsc-calibration-fast.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From b5a3b6e2e88679503375bcedc7f1adeda23f0877 Mon Sep 17 00:00:00 2001 +From 5f48569e8801685bde3f920058699c87a7f0c9e8 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Tue, 7 Nov 2017 17:12:17 -0500 Subject: Make pmtimer tsc calibration not take 51 seconds to fail. @@ -61,14 +61,12 @@ (cherry picked from commit cf0448d61e00acb548f8f22d57ba6e4f3b37f394) Patch-Name: rhboot-f34-make-pmtimer-tsc-calibration-fast.patch -(cherry picked from commit ecea6495041ee81331d245cf25ac53d66f07561c) -(cherry picked from commit 2dcab8aa8e8b10e6d4bba08cf11fcad38940b237) --- grub-core/kern/i386/tsc_pmtimer.c | 109 ++++++++++++++++++++++++------ 1 file changed, 89 insertions(+), 20 deletions(-) diff --git a/grub-core/kern/i386/tsc_pmtimer.c b/grub-core/kern/i386/tsc_pmtimer.c -index c9c361699..ca15c3aac 100644 +index c9c3616997..ca15c3aacd 100644 --- a/grub-core/kern/i386/tsc_pmtimer.c +++ b/grub-core/kern/i386/tsc_pmtimer.c @@ -28,40 +28,101 @@ diff -Nru grub2-2.04/debian/patches/rhboot-f34-support-non-ethernet.patch grub2-2.04/debian/patches/rhboot-f34-support-non-ethernet.patch --- grub2-2.04/debian/patches/rhboot-f34-support-non-ethernet.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/rhboot-f34-support-non-ethernet.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 5a19e7ef7b406ddb8c7e661f3b5e02d7834b9f84 Mon Sep 17 00:00:00 2001 +From 4bed6e4fab34d7d0c18eccc36c06e18332dae916 Mon Sep 17 00:00:00 2001 From: Andrzej Kacprowski Date: Wed, 10 Jul 2019 15:22:29 +0200 Subject: Add support for non-Ethernet network cards @@ -25,8 +25,6 @@ (cherry picked from commit 50f3f90fe7ef5a875ede559124280d226d40743b) Patch-Name: rhboot-f34-support-non-ethernet.patch -(cherry picked from commit f017d81d8d38a91e5b9bea1597c94d42935702f4) -(cherry picked from commit a77943fc39865de3378603def9bdf780ffd3c0f7) --- grub-core/net/arp.c | 157 ++++++++++++++++--------- grub-core/net/bootp.c | 15 +-- @@ -43,7 +41,7 @@ 12 files changed, 220 insertions(+), 153 deletions(-) diff --git a/grub-core/net/arp.c b/grub-core/net/arp.c -index 54306e3b1..67b409a8a 100644 +index 54306e3b16..67b409a8ac 100644 --- a/grub-core/net/arp.c +++ b/grub-core/net/arp.c @@ -31,22 +31,12 @@ enum @@ -277,7 +275,7 @@ /* Change operation to REPLY and send packet */ send_ethernet_packet (inf, &nb_reply, target, GRUB_NET_ETHERTYPE_ARP); diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c -index dd0ffcdae..233af56bc 100644 +index dd0ffcdaea..233af56bcd 100644 --- a/grub-core/net/bootp.c +++ b/grub-core/net/bootp.c @@ -314,7 +314,6 @@ grub_net_configure_by_dhcp_ack (const char *name, @@ -324,7 +322,7 @@ grub_netbuff_push (nb, sizeof (*udph)); diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c -index 82a28fb6e..e77136404 100644 +index 82a28fb6e9..e771364045 100644 --- a/grub-core/net/drivers/efi/efinet.c +++ b/grub-core/net/drivers/efi/efinet.c @@ -279,6 +279,9 @@ grub_efinet_findcards (void) @@ -352,7 +350,7 @@ card->efi_handle = *handle; diff --git a/grub-core/net/drivers/emu/emunet.c b/grub-core/net/drivers/emu/emunet.c -index b19492086..5b6c5e16a 100644 +index b194920861..5b6c5e16a6 100644 --- a/grub-core/net/drivers/emu/emunet.c +++ b/grub-core/net/drivers/emu/emunet.c @@ -46,6 +46,7 @@ static struct grub_net_card emucard = @@ -364,7 +362,7 @@ }, .flags = 0 diff --git a/grub-core/net/drivers/i386/pc/pxe.c b/grub-core/net/drivers/i386/pc/pxe.c -index 3f4152d03..9f8fb4b6d 100644 +index 3f4152d036..9f8fb4b6d2 100644 --- a/grub-core/net/drivers/i386/pc/pxe.c +++ b/grub-core/net/drivers/i386/pc/pxe.c @@ -386,20 +386,21 @@ GRUB_MOD_INIT(pxe) @@ -396,7 +394,7 @@ grub_pxe_card.default_address.type = GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET; diff --git a/grub-core/net/drivers/ieee1275/ofnet.c b/grub-core/net/drivers/ieee1275/ofnet.c -index ac4e62a95..057ba8597 100644 +index ac4e62a95c..057ba85973 100644 --- a/grub-core/net/drivers/ieee1275/ofnet.c +++ b/grub-core/net/drivers/ieee1275/ofnet.c @@ -160,6 +160,7 @@ grub_ieee1275_parse_bootpath (const char *devpath, char *bootpath, @@ -416,7 +414,7 @@ card->txbufsize = ALIGN_UP (card->mtu, 64) + 256; diff --git a/grub-core/net/drivers/uboot/ubootnet.c b/grub-core/net/drivers/uboot/ubootnet.c -index 056052e40..22ebcbf21 100644 +index 056052e40d..22ebcbf211 100644 --- a/grub-core/net/drivers/uboot/ubootnet.c +++ b/grub-core/net/drivers/uboot/ubootnet.c @@ -131,6 +131,7 @@ GRUB_MOD_INIT (ubootnet) @@ -428,7 +426,7 @@ card->txbufsize = ALIGN_UP (card->mtu, 64) + 256; card->txbuf = grub_zalloc (card->txbufsize); diff --git a/grub-core/net/ethernet.c b/grub-core/net/ethernet.c -index 4d7ceed6f..9aae83a5e 100644 +index 4d7ceed6f9..9aae83a5eb 100644 --- a/grub-core/net/ethernet.c +++ b/grub-core/net/ethernet.c @@ -29,13 +29,6 @@ @@ -578,7 +576,7 @@ { /* ARP packet. */ diff --git a/grub-core/net/icmp6.c b/grub-core/net/icmp6.c -index 2cbd95dce..56a3ec5c8 100644 +index 2cbd95dce2..56a3ec5c8e 100644 --- a/grub-core/net/icmp6.c +++ b/grub-core/net/icmp6.c @@ -231,8 +231,9 @@ grub_net_recv_icmp6_packet (struct grub_net_buff *nb, @@ -618,7 +616,7 @@ } if (ohdr->type == OPTION_PREFIX && ohdr->len == 4) diff --git a/grub-core/net/ip.c b/grub-core/net/ip.c -index 01410798b..ce6bdc75c 100644 +index 01410798b3..ce6bdc75c6 100644 --- a/grub-core/net/ip.c +++ b/grub-core/net/ip.c @@ -315,8 +315,8 @@ handle_dgram (struct grub_net_buff *nb, @@ -633,7 +631,7 @@ grub_net_process_dhcp (nb, inf); grub_netbuff_free (nb); diff --git a/grub-core/net/net.c b/grub-core/net/net.c -index fed7bc57c..cdae1fe39 100644 +index fed7bc57cb..cdae1fe398 100644 --- a/grub-core/net/net.c +++ b/grub-core/net/net.c @@ -128,8 +128,9 @@ grub_net_link_layer_resolve (struct grub_net_network_level_interface *inf, @@ -719,7 +717,7 @@ int diff --git a/include/grub/net.h b/include/grub/net.h -index b5f9e617e..66375af06 100644 +index b5f9e617e5..66375af068 100644 --- a/include/grub/net.h +++ b/include/grub/net.h @@ -29,7 +29,8 @@ diff -Nru grub2-2.04/debian/patches/rhboot-f34-tcp-add-window-scaling-support.patch grub2-2.04/debian/patches/rhboot-f34-tcp-add-window-scaling-support.patch --- grub2-2.04/debian/patches/rhboot-f34-tcp-add-window-scaling-support.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/rhboot-f34-tcp-add-window-scaling-support.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 86304c1a906e46dfd7cbcf045b4c97a92d3bbd6b Mon Sep 17 00:00:00 2001 +From d74613f7c47c2f8ca2e61ceffb68cef9d48d3efe Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Wed, 12 Aug 2015 08:57:55 -0700 Subject: tcp: add window scaling support @@ -15,14 +15,12 @@ (cherry picked from commit 995d66fc218e3ddd852269753be0ebd71b72174f) Patch-Name: rhboot-f34-tcp-add-window-scaling-support.patch -(cherry picked from commit e236246964433c2acd448707bdcaf0197d97e69d) -(cherry picked from commit 28896137e9b101a695fcea0996186c2c700faf13) --- grub-core/net/tcp.c | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/grub-core/net/tcp.c b/grub-core/net/tcp.c -index e8ad34b84..7d4b82262 100644 +index e8ad34b84d..7d4b822626 100644 --- a/grub-core/net/tcp.c +++ b/grub-core/net/tcp.c @@ -106,6 +106,18 @@ struct tcphdr diff -Nru grub2-2.04/debian/patches/rhboot-f34-update-info-with-grub.cfg-netboot-selection-order.patch grub2-2.04/debian/patches/rhboot-f34-update-info-with-grub.cfg-netboot-selection-order.patch --- grub2-2.04/debian/patches/rhboot-f34-update-info-with-grub.cfg-netboot-selection-order.patch 1970-01-01 00:00:00.000000000 +0000 +++ grub2-2.04/debian/patches/rhboot-f34-update-info-with-grub.cfg-netboot-selection-order.patch 2021-02-11 16:22:35.000000000 +0000 @@ -0,0 +1,68 @@ +From f6684f1ec1ea814bd6d4bbf664e44c6feac20953 Mon Sep 17 00:00:00 2001 +From: Robert Marshall +Date: Mon, 16 Mar 2015 16:34:51 -0400 +Subject: Update info with grub.cfg netboot selection order (#1148650) + +Added documentation to the grub info page that specifies the order +netboot clients will use to select a grub configuration file. + +Resolves rhbz#1148650 + +Patch-Name: rhboot-f34-update-info-with-grub.cfg-netboot-selection-order.patch +--- + docs/grub.texi | 42 ++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 42 insertions(+) + +diff --git a/docs/grub.texi b/docs/grub.texi +index 1d60218bc4..d949edf88f 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -2518,6 +2518,48 @@ grub-mknetdir --net-directory=/srv/tftp --subdir=/boot/grub -d /usr/lib/grub/i38 + Then follow instructions printed out by grub-mknetdir on configuring your DHCP + server. + ++The grub.cfg file is placed in the same directory as the path output by ++grub-mknetdir hereafter referred to as FWPATH. GRUB will search for its ++configuration files in order using the following rules where the appended ++value corresponds to a value on the client machine. ++ ++@example ++@group ++@samp{(FWPATH)}/grub.cfg-@samp{(UUID OF NIC)} ++@samp{(FWPATH)}/grub.cfg-@samp{(MAC ADDRESS OF NIC)} ++@samp{(FWPATH)}/grub.cfg-@samp{(IPv4 OR IPv6 ADDRESS)} ++@samp{(FWPATH)}/grub.cfg ++@end group ++@end example ++ ++The client will only attempt to look up an IPv6 address config once, however, ++it will try the IPv4 multiple times. The concrete example below shows what ++would happen under the IPv4 case. ++ ++@example ++@group ++UUID: 7726a678-7fc0-4853-a4f6-c85ac36a120a ++MAC: 52:54:00:ec:33:81 ++IPV4: 10.0.0.130 (0A000082) ++@end group ++@end example ++ ++@example ++@group ++@samp{(FWPATH)}/grub.cfg-7726a678-7fc0-4853-a4f6-c85ac36a120a ++@samp{(FWPATH)}/grub.cfg-52-54-00-ec-33-81 ++@samp{(FWPATH)}/grub.cfg-0A000082 ++@samp{(FWPATH)}/grub.cfg-0A00008 ++@samp{(FWPATH)}/grub.cfg-0A0000 ++@samp{(FWPATH)}/grub.cfg-0A000 ++@samp{(FWPATH)}/grub.cfg-0A00 ++@samp{(FWPATH)}/grub.cfg-0A0 ++@samp{(FWPATH)}/grub.cfg-0A ++@samp{(FWPATH)}/grub.cfg-0 ++@samp{(FWPATH)}/grub.cfg ++@end group ++@end example ++ + After GRUB has started, files on the TFTP server will be accessible via the + @samp{(tftp)} device. + diff -Nru grub2-2.04/debian/patches/series grub2-2.04/debian/patches/series --- grub2-2.04/debian/patches/series 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/series 2021-02-11 16:22:32.000000000 +0000 @@ -111,6 +111,8 @@ ubuntu-dejavu-font-path.patch ubuntu-linuxefi-arm64-set-base-addr.patch tftp-rollover-block-counter.patch +ubuntu-add-initrd-less-boot-messages.patch +ubuntu-fix-reproducible-squashfs-test.patch rhboot-f34-make-exit-take-a-return-code.patch rhboot-f34-dont-use-int-for-efi-status.patch rhboot-f34-tcp-add-window-scaling-support.patch @@ -118,3 +120,11 @@ ubuntu-fixup-rhboot-f34-support-non-ethernet.patch ubuntu-fixup-rhboot-f34-support-non-ethernet-2.patch rhboot-f34-make-pmtimer-tsc-calibration-fast.patch +suse-grub.texi-add-net_bootp6-document.patch +suse-add-support-for-UEFI-network-protocols.patch +suse-AUDIT-0-http-boot-tracker-bug.patch +rhboot-f34-efinet-also-use-the-firmware-acceleration-for-http.patch +cherry-move-common-datetime-functions.patch +suse-search-for-specific-config-files-for-netboot.patch +cherry-enable-datetime-emu.patch +rhboot-f34-update-info-with-grub.cfg-netboot-selection-order.patch diff -Nru grub2-2.04/debian/patches/skip-grub_cmd_set_date.patch grub2-2.04/debian/patches/skip-grub_cmd_set_date.patch --- grub2-2.04/debian/patches/skip-grub_cmd_set_date.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/skip-grub_cmd_set_date.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 0bd95cc9927bd92aa12a5fa9ba6ffd11ffc8b910 Mon Sep 17 00:00:00 2001 +From 1d6bd514733d871dbda295fa9eef90a85ad429c0 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Sun, 28 Oct 2018 19:45:56 +0000 Subject: Skip flaky grub_cmd_set_date test @@ -12,7 +12,7 @@ 1 file changed, 3 insertions(+) diff --git a/tests/grub_cmd_set_date.in b/tests/grub_cmd_set_date.in -index aac120a6c..1bb5be4ca 100644 +index aac120a6c5..1bb5be4ca7 100644 --- a/tests/grub_cmd_set_date.in +++ b/tests/grub_cmd_set_date.in @@ -1,6 +1,9 @@ diff -Nru grub2-2.04/debian/patches/sleep-shift.patch grub2-2.04/debian/patches/sleep-shift.patch --- grub2-2.04/debian/patches/sleep-shift.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/sleep-shift.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From e731dba24511ce3c9a06923db223ddd337798719 Mon Sep 17 00:00:00 2001 +From 0cfccb0f53056032a4730c0e39a246394bf22ad1 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:23 +0000 Subject: Allow Shift to interrupt 'sleep --interruptible' @@ -17,7 +17,7 @@ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/grub-core/commands/sleep.c b/grub-core/commands/sleep.c -index e77e7900f..3906b1410 100644 +index e77e7900fa..3906b14103 100644 --- a/grub-core/commands/sleep.c +++ b/grub-core/commands/sleep.c @@ -46,6 +46,31 @@ do_print (int n) @@ -62,7 +62,7 @@ return 0; diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c -index d5e0c79a7..3611ee9ea 100644 +index d5e0c79a70..3611ee9ea7 100644 --- a/grub-core/normal/menu.c +++ b/grub-core/normal/menu.c @@ -615,8 +615,27 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot) diff -Nru grub2-2.04/debian/patches/suse-add-support-for-UEFI-network-protocols.patch grub2-2.04/debian/patches/suse-add-support-for-UEFI-network-protocols.patch --- grub2-2.04/debian/patches/suse-add-support-for-UEFI-network-protocols.patch 1970-01-01 00:00:00.000000000 +0000 +++ grub2-2.04/debian/patches/suse-add-support-for-UEFI-network-protocols.patch 2021-02-11 16:22:35.000000000 +0000 @@ -0,0 +1,4948 @@ +From c6c371d6bb6ce2af379bb2fafd950ff4d9c7d993 Mon Sep 17 00:00:00 2001 +From: Michael Chang +Date: Wed, 22 Feb 2017 14:27:50 +0800 +Subject: Support UEFI networking protocols + +References: fate#320130, bsc#1015589, bsc#1076132 +Patch-Mainline: no + +V1: + * Add preliminary support of UEFI networking protocols + * Support UEFI HTTPS Boot + +V2: + * Workaround http data access in firmware + * Fix DNS device path parsing for efinet device + * Relaxed UEFI Protocol requirement + * Support Intel OPA (Omni-Path Architecture) PXE Boot + +V3: + * Fix bufio in calculating address of next_buf + * Check HTTP respond code + * Use HEAD request method to test before GET + * Finish HTTP transaction in one go + * Fix bsc#1076132 + +V4: + * Add fs_ prefix with upstream commit + ad4bfeec5 Change fs functions to add fs_ prefix + +V5: + * Use overflow checking primitives where the arithmetic expression for + buffer allocations may include unvalidated data + * Use grub_calloc for overflow check and return NULL when it would + occur. + +V6: + * Don't force grub_print_error if no best route found as boot process + could be interrupted by logged error. The default interface will be + used as fallback in this case + +Orign: SUSE +UEFI HTTP and related network protocol support (FATE#320130) +Patch420: 0001-add-support-for-UEFI-network-protocols.patch + +Patch-Name: suse-add-support-for-UEFI-network-protocols.patch +--- + grub-core/Makefile.core.def | 6 + + grub-core/io/bufio.c | 2 +- + grub-core/kern/efi/efi.c | 96 +- + grub-core/net/drivers/efi/efinet.c | 27 + + grub-core/net/efi/dhcp.c | 399 ++++++++ + grub-core/net/efi/http.c | 424 ++++++++ + grub-core/net/efi/ip4_config.c | 409 ++++++++ + grub-core/net/efi/ip6_config.c | 430 +++++++++ + grub-core/net/efi/net.c | 1440 ++++++++++++++++++++++++++++ + grub-core/net/efi/pxe.c | 424 ++++++++ + grub-core/net/net.c | 74 ++ + include/grub/efi/api.h | 181 +++- + include/grub/efi/dhcp.h | 343 +++++++ + include/grub/efi/http.h | 215 +++++ + include/grub/net/efi.h | 144 +++ + 15 files changed, 4577 insertions(+), 37 deletions(-) + create mode 100644 grub-core/net/efi/dhcp.c + create mode 100644 grub-core/net/efi/http.c + create mode 100644 grub-core/net/efi/ip4_config.c + create mode 100644 grub-core/net/efi/ip6_config.c + create mode 100644 grub-core/net/efi/net.c + create mode 100644 grub-core/net/efi/pxe.c + create mode 100644 include/grub/efi/dhcp.h + create mode 100644 include/grub/efi/http.h + create mode 100644 include/grub/net/efi.h + +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index 9b20f33355..20be18575f 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -2308,6 +2308,12 @@ module = { + common = net/ethernet.c; + common = net/arp.c; + common = net/netbuff.c; ++ efi = net/efi/net.c; ++ efi = net/efi/http.c; ++ efi = net/efi/pxe.c; ++ efi = net/efi/ip4_config.c; ++ efi = net/efi/ip6_config.c; ++ efi = net/efi/dhcp.c; + }; + + module = { +diff --git a/grub-core/io/bufio.c b/grub-core/io/bufio.c +index a458c3aca7..1637731535 100644 +--- a/grub-core/io/bufio.c ++++ b/grub-core/io/bufio.c +@@ -139,7 +139,7 @@ grub_bufio_read (grub_file_t file, char *buf, grub_size_t len) + return res; + + /* Need to read some more. */ +- next_buf = (file->offset + res + len - 1) & ~((grub_off_t) bufio->block_size - 1); ++ next_buf = (grub_divmod64 (file->offset + res + len - 1, bufio->block_size, NULL)) * bufio->block_size; + /* Now read between file->offset + res and bufio->buffer_at. */ + if (file->offset + res < next_buf) + { +diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c +index 7cf003f713..ff200a0457 100644 +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -732,7 +732,7 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp) + { + grub_efi_ipv4_device_path_t *ipv4 + = (grub_efi_ipv4_device_path_t *) dp; +- grub_printf ("/IPv4(%u.%u.%u.%u,%u.%u.%u.%u,%u,%u,%x,%x)", ++ grub_printf ("/IPv4(%u.%u.%u.%u,%u.%u.%u.%u,%u,%u,%x,%x", + (unsigned) ipv4->local_ip_address[0], + (unsigned) ipv4->local_ip_address[1], + (unsigned) ipv4->local_ip_address[2], +@@ -745,33 +745,60 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp) + (unsigned) ipv4->remote_port, + (unsigned) ipv4->protocol, + (unsigned) ipv4->static_ip_address); ++ if (len == sizeof (*ipv4)) ++ { ++ grub_printf (",%u.%u.%u.%u,%u.%u.%u.%u", ++ (unsigned) ipv4->gateway_ip_address[0], ++ (unsigned) ipv4->gateway_ip_address[1], ++ (unsigned) ipv4->gateway_ip_address[2], ++ (unsigned) ipv4->gateway_ip_address[3], ++ (unsigned) ipv4->subnet_mask[0], ++ (unsigned) ipv4->subnet_mask[1], ++ (unsigned) ipv4->subnet_mask[2], ++ (unsigned) ipv4->subnet_mask[3]); ++ } ++ grub_printf (")"); + } + break; + case GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE: + { + grub_efi_ipv6_device_path_t *ipv6 + = (grub_efi_ipv6_device_path_t *) dp; +- grub_printf ("/IPv6(%x:%x:%x:%x:%x:%x:%x:%x,%x:%x:%x:%x:%x:%x:%x:%x,%u,%u,%x,%x)", +- (unsigned) ipv6->local_ip_address[0], +- (unsigned) ipv6->local_ip_address[1], +- (unsigned) ipv6->local_ip_address[2], +- (unsigned) ipv6->local_ip_address[3], +- (unsigned) ipv6->local_ip_address[4], +- (unsigned) ipv6->local_ip_address[5], +- (unsigned) ipv6->local_ip_address[6], +- (unsigned) ipv6->local_ip_address[7], +- (unsigned) ipv6->remote_ip_address[0], +- (unsigned) ipv6->remote_ip_address[1], +- (unsigned) ipv6->remote_ip_address[2], +- (unsigned) ipv6->remote_ip_address[3], +- (unsigned) ipv6->remote_ip_address[4], +- (unsigned) ipv6->remote_ip_address[5], +- (unsigned) ipv6->remote_ip_address[6], +- (unsigned) ipv6->remote_ip_address[7], ++ grub_printf ("/IPv6(%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x,%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x,%u,%u,%x,%x", ++ (unsigned) grub_be_to_cpu16 (ipv6->local_ip_address[0]), ++ (unsigned) grub_be_to_cpu16 (ipv6->local_ip_address[1]), ++ (unsigned) grub_be_to_cpu16 (ipv6->local_ip_address[2]), ++ (unsigned) grub_be_to_cpu16 (ipv6->local_ip_address[3]), ++ (unsigned) grub_be_to_cpu16 (ipv6->local_ip_address[4]), ++ (unsigned) grub_be_to_cpu16 (ipv6->local_ip_address[5]), ++ (unsigned) grub_be_to_cpu16 (ipv6->local_ip_address[6]), ++ (unsigned) grub_be_to_cpu16 (ipv6->local_ip_address[7]), ++ (unsigned) grub_be_to_cpu16 (ipv6->remote_ip_address[0]), ++ (unsigned) grub_be_to_cpu16 (ipv6->remote_ip_address[1]), ++ (unsigned) grub_be_to_cpu16 (ipv6->remote_ip_address[2]), ++ (unsigned) grub_be_to_cpu16 (ipv6->remote_ip_address[3]), ++ (unsigned) grub_be_to_cpu16 (ipv6->remote_ip_address[4]), ++ (unsigned) grub_be_to_cpu16 (ipv6->remote_ip_address[5]), ++ (unsigned) grub_be_to_cpu16 (ipv6->remote_ip_address[6]), ++ (unsigned) grub_be_to_cpu16 (ipv6->remote_ip_address[7]), + (unsigned) ipv6->local_port, + (unsigned) ipv6->remote_port, + (unsigned) ipv6->protocol, + (unsigned) ipv6->static_ip_address); ++ if (len == sizeof (*ipv6)) ++ { ++ grub_printf (",%u,%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", ++ (unsigned) ipv6->prefix_length, ++ (unsigned) grub_be_to_cpu16 (ipv6->gateway_ip_address[0]), ++ (unsigned) grub_be_to_cpu16 (ipv6->gateway_ip_address[1]), ++ (unsigned) grub_be_to_cpu16 (ipv6->gateway_ip_address[2]), ++ (unsigned) grub_be_to_cpu16 (ipv6->gateway_ip_address[3]), ++ (unsigned) grub_be_to_cpu16 (ipv6->gateway_ip_address[4]), ++ (unsigned) grub_be_to_cpu16 (ipv6->gateway_ip_address[5]), ++ (unsigned) grub_be_to_cpu16 (ipv6->gateway_ip_address[6]), ++ (unsigned) grub_be_to_cpu16 (ipv6->gateway_ip_address[7])); ++ } ++ grub_printf (")"); + } + break; + case GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE: +@@ -811,6 +838,39 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp) + dump_vendor_path ("Messaging", + (grub_efi_vendor_device_path_t *) dp); + break; ++ case GRUB_EFI_URI_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_uri_device_path_t *uri ++ = (grub_efi_uri_device_path_t *) dp; ++ grub_printf ("/URI(%s)", uri->uri); ++ } ++ break; ++ case GRUB_EFI_DNS_DEVICE_PATH_SUBTYPE: ++ { ++ grub_efi_dns_device_path_t *dns ++ = (grub_efi_dns_device_path_t *) dp; ++ if (dns->is_ipv6) ++ { ++ grub_printf ("/DNS(%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x)", ++ (grub_uint16_t)(grub_be_to_cpu32(dns->dns_server_ip[0].addr[0]) >> 16), ++ (grub_uint16_t)(grub_be_to_cpu32(dns->dns_server_ip[0].addr[0])), ++ (grub_uint16_t)(grub_be_to_cpu32(dns->dns_server_ip[0].addr[1]) >> 16), ++ (grub_uint16_t)(grub_be_to_cpu32(dns->dns_server_ip[0].addr[1])), ++ (grub_uint16_t)(grub_be_to_cpu32(dns->dns_server_ip[0].addr[2]) >> 16), ++ (grub_uint16_t)(grub_be_to_cpu32(dns->dns_server_ip[0].addr[2])), ++ (grub_uint16_t)(grub_be_to_cpu32(dns->dns_server_ip[0].addr[3]) >> 16), ++ (grub_uint16_t)(grub_be_to_cpu32(dns->dns_server_ip[0].addr[3]))); ++ } ++ else ++ { ++ grub_printf ("/DNS(%d.%d.%d.%d)", ++ dns->dns_server_ip[0].v4.addr[0], ++ dns->dns_server_ip[0].v4.addr[1], ++ dns->dns_server_ip[0].v4.addr[2], ++ dns->dns_server_ip[0].v4.addr[3]); ++ } ++ } ++ break; + default: + grub_printf ("/UnknownMessaging(%x)", (unsigned) subtype); + break; +diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c +index e771364045..8d229e2221 100644 +--- a/grub-core/net/drivers/efi/efinet.c ++++ b/grub-core/net/drivers/efi/efinet.c +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -485,6 +486,17 @@ grub_efinet_create_dhcp_ack_from_device_path (grub_efi_device_path_t *dp, int *u + + ldp = grub_efi_find_last_device_path (ddp); + ++ /* Skip the DNS Device */ ++ if (GRUB_EFI_DEVICE_PATH_TYPE (ldp) == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE ++ && GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_DNS_DEVICE_PATH_SUBTYPE) ++ { ++ ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ++ ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ++ ldp->length = sizeof (*ldp); ++ ++ ldp = grub_efi_find_last_device_path (ddp); ++ } ++ + if (GRUB_EFI_DEVICE_PATH_TYPE (ldp) != GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE + || (GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) != GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE + && GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) != GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE)) +@@ -748,6 +760,7 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device, + if (GRUB_EFI_DEVICE_PATH_TYPE (ldp) != GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE + || (GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) != GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE + && GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) != GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE ++ && GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) != GRUB_EFI_DNS_DEVICE_PATH_SUBTYPE + && GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) != GRUB_EFI_URI_DEVICE_PATH_SUBTYPE)) + continue; + dup_dp = grub_efi_duplicate_device_path (dp); +@@ -762,6 +775,15 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device, + dup_ldp->length = sizeof (*dup_ldp); + } + ++ dup_ldp = grub_efi_find_last_device_path (dup_dp); ++ if (GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_DNS_DEVICE_PATH_SUBTYPE) ++ { ++ dup_ldp = grub_efi_find_last_device_path (dup_dp); ++ dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ++ dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ++ dup_ldp->length = sizeof (*dup_ldp); ++ } ++ + dup_ldp = grub_efi_find_last_device_path (dup_dp); + dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; + dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; +@@ -820,6 +842,9 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device, + + GRUB_MOD_INIT(efinet) + { ++ if (grub_efi_net_config) ++ return; ++ + grub_efinet_findcards (); + grub_efi_net_config = grub_efi_net_config_real; + } +@@ -831,5 +856,7 @@ GRUB_MOD_FINI(efinet) + FOR_NET_CARDS_SAFE (card, next) + if (card->driver == &efidriver) + grub_net_card_unregister (card); ++ ++ grub_efi_net_config = NULL; + } + +diff --git a/grub-core/net/efi/dhcp.c b/grub-core/net/efi/dhcp.c +new file mode 100644 +index 0000000000..4001c04a22 +--- /dev/null ++++ b/grub-core/net/efi/dhcp.c +@@ -0,0 +1,399 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef GRUB_EFI_NET_DEBUG ++static void ++dhcp4_mode_print (grub_efi_dhcp4_mode_data_t *mode) ++{ ++ switch (mode->state) ++ { ++ case GRUB_EFI_DHCP4_STOPPED: ++ grub_printf ("STATE: STOPPED\n"); ++ break; ++ case GRUB_EFI_DHCP4_INIT: ++ grub_printf ("STATE: INIT\n"); ++ break; ++ case GRUB_EFI_DHCP4_SELECTING: ++ grub_printf ("STATE: SELECTING\n"); ++ break; ++ case GRUB_EFI_DHCP4_REQUESTING: ++ grub_printf ("STATE: REQUESTING\n"); ++ break; ++ case GRUB_EFI_DHCP4_BOUND: ++ grub_printf ("STATE: BOUND\n"); ++ break; ++ case GRUB_EFI_DHCP4_RENEWING: ++ grub_printf ("STATE: RENEWING\n"); ++ break; ++ case GRUB_EFI_DHCP4_REBINDING: ++ grub_printf ("STATE: REBINDING\n"); ++ break; ++ case GRUB_EFI_DHCP4_INIT_REBOOT: ++ grub_printf ("STATE: INIT_REBOOT\n"); ++ break; ++ case GRUB_EFI_DHCP4_REBOOTING: ++ grub_printf ("STATE: REBOOTING\n"); ++ break; ++ default: ++ grub_printf ("STATE: UNKNOWN\n"); ++ break; ++ } ++ ++ grub_printf ("CLIENT_ADDRESS: %u.%u.%u.%u\n", ++ mode->client_address[0], ++ mode->client_address[1], ++ mode->client_address[2], ++ mode->client_address[3]); ++ grub_printf ("SERVER_ADDRESS: %u.%u.%u.%u\n", ++ mode->server_address[0], ++ mode->server_address[1], ++ mode->server_address[2], ++ mode->server_address[3]); ++ grub_printf ("SUBNET_MASK: %u.%u.%u.%u\n", ++ mode->subnet_mask[0], ++ mode->subnet_mask[1], ++ mode->subnet_mask[2], ++ mode->subnet_mask[3]); ++ grub_printf ("ROUTER_ADDRESS: %u.%u.%u.%u\n", ++ mode->router_address[0], ++ mode->router_address[1], ++ mode->router_address[2], ++ mode->router_address[3]); ++} ++#endif ++ ++static grub_efi_ipv4_address_t * ++grub_efi_dhcp4_parse_dns (grub_efi_dhcp4_protocol_t *dhcp4, grub_efi_dhcp4_packet_t *reply_packet) ++{ ++ grub_efi_dhcp4_packet_option_t **option_list; ++ grub_efi_status_t status; ++ grub_efi_uint32_t option_count = 0; ++ grub_efi_uint32_t i; ++ ++ status = efi_call_4 (dhcp4->parse, dhcp4, reply_packet, &option_count, NULL); ++ ++ if (status != GRUB_EFI_BUFFER_TOO_SMALL) ++ return NULL; ++ ++ option_list = grub_calloc (option_count, sizeof(*option_list)); ++ if (!option_list) ++ return NULL; ++ ++ status = efi_call_4 (dhcp4->parse, dhcp4, reply_packet, &option_count, option_list); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_free (option_list); ++ return NULL; ++ } ++ ++ for (i = 0; i < option_count; ++i) ++ { ++ if (option_list[i]->op_code == 6) ++ { ++ grub_efi_ipv4_address_t *dns_address; ++ ++ if (((option_list[i]->length & 0x3) != 0) || (option_list[i]->length == 0)) ++ continue; ++ ++ /* We only contact primary dns */ ++ dns_address = grub_malloc (sizeof (*dns_address)); ++ if (!dns_address) ++ { ++ grub_free (option_list); ++ return NULL; ++ } ++ grub_memcpy (dns_address, option_list[i]->data, sizeof (dns_address)); ++ grub_free (option_list); ++ return dns_address; ++ } ++ } ++ ++ grub_free (option_list); ++ return NULL; ++} ++ ++#if 0 ++/* Somehow this doesn't work ... */ ++static grub_err_t ++grub_cmd_efi_bootp (struct grub_command *cmd __attribute__ ((unused)), ++ int argc __attribute__ ((unused)), ++ char **args __attribute__ ((unused))) ++{ ++ struct grub_efi_net_device *dev; ++ for (dev = net_devices; dev; dev = dev->next) ++ { ++ grub_efi_pxe_t *pxe = dev->ip4_pxe; ++ grub_efi_pxe_mode_t *mode = pxe->mode; ++ grub_efi_status_t status; ++ ++ if (!mode->started) ++ { ++ status = efi_call_2 (pxe->start, pxe, 0); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ grub_printf ("Couldn't start PXE\n"); ++ } ++ ++ status = efi_call_2 (pxe->dhcp, pxe, 0); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_printf ("dhcp4 configure failed, %d\n", (int)status); ++ continue; ++ } ++ ++ dev->prefer_ip6 = 0; ++ } ++ ++ return GRUB_ERR_NONE; ++} ++#endif ++ ++static grub_err_t ++grub_cmd_efi_bootp (struct grub_command *cmd __attribute__ ((unused)), ++ int argc, ++ char **args) ++{ ++ struct grub_efi_net_device *netdev; ++ ++ for (netdev = net_devices; netdev; netdev = netdev->next) ++ { ++ grub_efi_status_t status; ++ grub_efi_dhcp4_mode_data_t mode; ++ grub_efi_dhcp4_config_data_t config; ++ grub_efi_dhcp4_packet_option_t *options; ++ grub_efi_ipv4_address_t *dns_address; ++ grub_efi_net_ip_manual_address_t net_ip; ++ grub_efi_net_ip_address_t ip_addr; ++ grub_efi_net_interface_t *inf = NULL; ++ ++ if (argc > 0 && grub_strcmp (netdev->card_name, args[0]) != 0) ++ continue; ++ ++ grub_memset (&config, 0, sizeof(config)); ++ ++ config.option_count = 1; ++ options = grub_malloc (sizeof(*options) + 2); ++ /* Parameter request list */ ++ options->op_code = 55; ++ options->length = 3; ++ /* subnet mask */ ++ options->data[0] = 1; ++ /* router */ ++ options->data[1] = 3; ++ /* DNS */ ++ options->data[2] = 6; ++ config.option_list = &options; ++ ++ /* FIXME: What if the dhcp has bounded */ ++ status = efi_call_2 (netdev->dhcp4->configure, netdev->dhcp4, &config); ++ grub_free (options); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_printf ("dhcp4 configure failed, %d\n", (int)status); ++ continue; ++ } ++ ++ status = efi_call_2 (netdev->dhcp4->start, netdev->dhcp4, NULL); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_printf ("dhcp4 start failed, %d\n", (int)status); ++ continue; ++ } ++ ++ status = efi_call_2 (netdev->dhcp4->get_mode_data, netdev->dhcp4, &mode); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_printf ("dhcp4 get mode failed, %d\n", (int)status); ++ continue; ++ } ++ ++#ifdef GRUB_EFI_NET_DEBUG ++ dhcp4_mode_print (&mode); ++#endif ++ ++ for (inf = netdev->net_interfaces; inf; inf = inf->next) ++ if (inf->prefer_ip6 == 0) ++ break; ++ ++ grub_memcpy (net_ip.ip4.address, mode.client_address, sizeof (net_ip.ip4.address)); ++ grub_memcpy (net_ip.ip4.subnet_mask, mode.subnet_mask, sizeof (net_ip.ip4.subnet_mask)); ++ ++ if (!inf) ++ { ++ char *name = grub_xasprintf ("%s:dhcp", netdev->card_name); ++ ++ net_ip.is_ip6 = 0; ++ inf = grub_efi_net_create_interface (netdev, ++ name, ++ &net_ip, ++ 1); ++ grub_free (name); ++ } ++ else ++ { ++ efi_net_interface_set_address (inf, &net_ip, 1); ++ } ++ ++ grub_memcpy (ip_addr.ip4, mode.router_address, sizeof (ip_addr.ip4)); ++ efi_net_interface_set_gateway (inf, &ip_addr); ++ ++ dns_address = grub_efi_dhcp4_parse_dns (netdev->dhcp4, mode.reply_packet); ++ if (dns_address) ++ efi_net_interface_set_dns (inf, (grub_efi_net_ip_address_t *)&dns_address); ++ ++ } ++ ++ return GRUB_ERR_NONE; ++} ++ ++ ++static grub_err_t ++grub_cmd_efi_bootp6 (struct grub_command *cmd __attribute__ ((unused)), ++ int argc, ++ char **args) ++{ ++ struct grub_efi_net_device *dev; ++ grub_efi_uint32_t ia_id; ++ ++ for (dev = net_devices, ia_id = 0; dev; dev = dev->next, ia_id++) ++ { ++ grub_efi_dhcp6_config_data_t config; ++ grub_efi_dhcp6_packet_option_t *option_list[1]; ++ grub_efi_dhcp6_packet_option_t *opt; ++ grub_efi_status_t status; ++ grub_efi_dhcp6_mode_data_t mode; ++ grub_efi_dhcp6_retransmission_t retrans; ++ grub_efi_net_ip_manual_address_t net_ip; ++ grub_efi_boot_services_t *b = grub_efi_system_table->boot_services; ++ grub_efi_net_interface_t *inf = NULL; ++ ++ if (argc > 0 && grub_strcmp (dev->card_name, args[0]) != 0) ++ continue; ++ ++ opt = grub_malloc (sizeof(*opt) + 2 * sizeof (grub_efi_uint16_t)); ++ ++#define GRUB_EFI_DHCP6_OPT_ORO 6 ++ ++ opt->op_code = grub_cpu_to_be16_compile_time (GRUB_EFI_DHCP6_OPT_ORO); ++ opt->op_len = grub_cpu_to_be16_compile_time (2 * sizeof (grub_efi_uint16_t)); ++ ++#define GRUB_EFI_DHCP6_OPT_BOOT_FILE_URL 59 ++#define GRUB_EFI_DHCP6_OPT_DNS_SERVERS 23 ++ ++ grub_set_unaligned16 (opt->data, grub_cpu_to_be16_compile_time(GRUB_EFI_DHCP6_OPT_BOOT_FILE_URL)); ++ grub_set_unaligned16 (opt->data + 1 * sizeof (grub_efi_uint16_t), ++ grub_cpu_to_be16_compile_time(GRUB_EFI_DHCP6_OPT_DNS_SERVERS)); ++ ++ option_list[0] = opt; ++ retrans.irt = 4; ++ retrans.mrc = 4; ++ retrans.mrt = 32; ++ retrans.mrd = 60; ++ ++ config.dhcp6_callback = NULL; ++ config.callback_context = NULL; ++ config.option_count = 1; ++ config.option_list = option_list; ++ config.ia_descriptor.ia_id = ia_id; ++ config.ia_descriptor.type = GRUB_EFI_DHCP6_IA_TYPE_NA; ++ config.ia_info_event = NULL; ++ config.reconfigure_accept = 0; ++ config.rapid_commit = 0; ++ config.solicit_retransmission = &retrans; ++ ++ status = efi_call_2 (dev->dhcp6->configure, dev->dhcp6, &config); ++ grub_free (opt); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_printf ("dhcp6 configure failed, %d\n", (int)status); ++ continue; ++ } ++ status = efi_call_1 (dev->dhcp6->start, dev->dhcp6); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_printf ("dhcp6 start failed, %d\n", (int)status); ++ continue; ++ } ++ ++ status = efi_call_3 (dev->dhcp6->get_mode_data, dev->dhcp6, &mode, NULL); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_printf ("dhcp4 get mode failed, %d\n", (int)status); ++ continue; ++ } ++ ++ for (inf = dev->net_interfaces; inf; inf = inf->next) ++ if (inf->prefer_ip6 == 1) ++ break; ++ ++ grub_memcpy (net_ip.ip6.address, mode.ia->ia_address[0].ip_address, sizeof (net_ip.ip6.address)); ++ net_ip.ip6.prefix_length = 64; ++ net_ip.ip6.is_anycast = 0; ++ net_ip.is_ip6 = 1; ++ ++ if (!inf) ++ { ++ char *name = grub_xasprintf ("%s:dhcp", dev->card_name); ++ ++ inf = grub_efi_net_create_interface (dev, ++ name, ++ &net_ip, ++ 1); ++ grub_free (name); ++ } ++ else ++ { ++ efi_net_interface_set_address (inf, &net_ip, 1); ++ } ++ ++ { ++ grub_efi_uint32_t count = 0; ++ grub_efi_dhcp6_packet_option_t **options = NULL; ++ grub_efi_uint32_t i; ++ ++ status = efi_call_4 (dev->dhcp6->parse, dev->dhcp6, mode.ia->reply_packet, &count, NULL); ++ ++ if (status == GRUB_EFI_BUFFER_TOO_SMALL && count) ++ { ++ options = grub_calloc (count, sizeof(*options)); ++ if (!options) ++ return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ status = efi_call_4 (dev->dhcp6->parse, dev->dhcp6, mode.ia->reply_packet, &count, options); ++ } ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ if (options) ++ grub_free (options); ++ continue; ++ } ++ ++ for (i = 0; i < count; ++i) ++ { ++ if (options[i]->op_code == grub_cpu_to_be16_compile_time(GRUB_EFI_DHCP6_OPT_DNS_SERVERS)) ++ { ++ grub_efi_net_ip_address_t dns; ++ grub_memcpy (dns.ip6, options[i]->data, sizeof(net_ip.ip6)); ++ efi_net_interface_set_dns (inf, &dns); ++ break; ++ } ++ } ++ ++ if (options) ++ grub_free (options); ++ } ++ ++ efi_call_1 (b->free_pool, mode.client_id); ++ efi_call_1 (b->free_pool, mode.ia); ++ } ++ ++ return GRUB_ERR_NONE; ++} ++ ++grub_command_func_t grub_efi_net_bootp = grub_cmd_efi_bootp; ++grub_command_func_t grub_efi_net_bootp6 = grub_cmd_efi_bootp6; +diff --git a/grub-core/net/efi/http.c b/grub-core/net/efi/http.c +new file mode 100644 +index 0000000000..5fb472cb30 +--- /dev/null ++++ b/grub-core/net/efi/http.c +@@ -0,0 +1,424 @@ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static void ++http_configure (struct grub_efi_net_device *dev, int prefer_ip6) ++{ ++ grub_efi_http_config_data_t http_config; ++ grub_efi_httpv4_access_point_t httpv4_node; ++ grub_efi_httpv6_access_point_t httpv6_node; ++ grub_efi_status_t status; ++ ++ grub_efi_http_t *http = dev->http; ++ ++ grub_memset (&http_config, 0, sizeof(http_config)); ++ http_config.http_version = GRUB_EFI_HTTPVERSION11; ++ http_config.timeout_millisec = 5000; ++ ++ if (prefer_ip6) ++ { ++ grub_efi_uintn_t sz; ++ grub_efi_ip6_config_manual_address_t manual_address; ++ ++ http_config.local_address_is_ipv6 = 1; ++ sz = sizeof (manual_address); ++ status = efi_call_4 (dev->ip6_config->get_data, dev->ip6_config, ++ GRUB_EFI_IP6_CONFIG_DATA_TYPE_MANUAL_ADDRESS, ++ &sz, &manual_address); ++ ++ if (status == GRUB_EFI_NOT_FOUND) ++ { ++ grub_printf ("The MANUAL ADDRESS is not found\n"); ++ } ++ ++ /* FIXME: The manual interface would return BUFFER TOO SMALL !!! */ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_printf ("??? %d\n",(int) status); ++ return; ++ } ++ ++ grub_memcpy (httpv6_node.local_address, manual_address.address, sizeof (httpv6_node.local_address)); ++ httpv6_node.local_port = 0; ++ http_config.access_point.ipv6_node = &httpv6_node; ++ } ++ else ++ { ++ http_config.local_address_is_ipv6 = 0; ++ grub_memset (&httpv4_node, 0, sizeof(httpv4_node)); ++ httpv4_node.use_default_address = 1; ++ ++ /* Use random port here */ ++ /* See TcpBind() in edk2/NetworkPkg/TcpDxe/TcpDispatcher.c */ ++ httpv4_node.local_port = 0; ++ http_config.access_point.ipv4_node = &httpv4_node; ++ } ++ ++ status = efi_call_2 (http->configure, http, &http_config); ++ ++ if (status == GRUB_EFI_ALREADY_STARTED) ++ { ++ /* XXX: This hangs HTTPS boot */ ++#if 0 ++ if (efi_call_2 (http->configure, http, NULL) != GRUB_EFI_SUCCESS) ++ { ++ grub_error (GRUB_ERR_IO, N_("couldn't reset http instance")); ++ grub_print_error (); ++ return; ++ } ++ status = efi_call_2 (http->configure, http, &http_config); ++#endif ++ return; ++ } ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_error (GRUB_ERR_IO, N_("couldn't configure http protocol, reason: %d"), (int)status); ++ grub_print_error (); ++ return ; ++ } ++} ++ ++static grub_efi_boolean_t request_callback_done; ++static grub_efi_boolean_t response_callback_done; ++ ++static void ++grub_efi_http_request_callback (grub_efi_event_t event __attribute__ ((unused)), ++ void *context __attribute__ ((unused))) ++{ ++ request_callback_done = 1; ++} ++ ++static void ++grub_efi_http_response_callback (grub_efi_event_t event __attribute__ ((unused)), ++ void *context __attribute__ ((unused))) ++{ ++ response_callback_done = 1; ++} ++ ++static grub_err_t ++efihttp_request (grub_efi_http_t *http, char *server, char *name, int use_https, int headeronly, grub_off_t *file_size) ++{ ++ grub_efi_http_request_data_t request_data; ++ grub_efi_http_message_t request_message; ++ grub_efi_http_token_t request_token; ++ grub_efi_http_response_data_t response_data; ++ grub_efi_http_message_t response_message; ++ grub_efi_http_token_t response_token; ++ grub_efi_http_header_t request_headers[3]; ++ ++ grub_efi_status_t status; ++ grub_efi_boot_services_t *b = grub_efi_system_table->boot_services; ++ char *url = NULL; ++ ++ request_headers[0].field_name = (grub_efi_char8_t *)"Host"; ++ request_headers[0].field_value = (grub_efi_char8_t *)server; ++ request_headers[1].field_name = (grub_efi_char8_t *)"Accept"; ++ request_headers[1].field_value = (grub_efi_char8_t *)"*/*"; ++ request_headers[2].field_name = (grub_efi_char8_t *)"User-Agent"; ++ request_headers[2].field_value = (grub_efi_char8_t *)"UefiHttpBoot/1.0"; ++ ++ { ++ grub_efi_ipv6_address_t address; ++ const char *rest; ++ grub_efi_char16_t *ucs2_url; ++ grub_size_t url_len, ucs2_url_len; ++ const char *protocol = (use_https == 1) ? "https" : "http"; ++ grub_size_t sz; ++ ++ if (grub_efi_string_to_ip6_address (server, &address, &rest) && *rest == 0) ++ url = grub_xasprintf ("%s://[%s]%s", protocol, server, name); ++ else ++ url = grub_xasprintf ("%s://%s%s", protocol, server, name); ++ ++ if (!url) ++ { ++ return grub_errno; ++ } ++ ++ url_len = grub_strlen (url); ++ if (grub_mul (url_len, GRUB_MAX_UTF16_PER_UTF8, &ucs2_url_len) || ++ grub_add (ucs2_url_len, 1, &sz)) ++ return GRUB_ERR_OUT_OF_RANGE; ++ ++ ucs2_url = grub_calloc (sz, sizeof (ucs2_url[0])); ++ ++ if (!ucs2_url) ++ { ++ grub_free (url); ++ return grub_errno; ++ } ++ ++ ucs2_url_len = grub_utf8_to_utf16 (ucs2_url, ucs2_url_len, (grub_uint8_t *)url, url_len, NULL); /* convert string format from ascii to usc2 */ ++ ucs2_url[ucs2_url_len] = 0; ++ grub_free (url); ++ request_data.url = ucs2_url; ++ } ++ ++ request_data.method = (headeronly > 0) ? GRUB_EFI_HTTPMETHODHEAD : GRUB_EFI_HTTPMETHODGET; ++ ++ request_message.data.request = &request_data; ++ request_message.header_count = 3; ++ request_message.headers = request_headers; ++ request_message.body_length = 0; ++ request_message.body = NULL; ++ ++ /* request token */ ++ request_token.event = NULL; ++ request_token.status = GRUB_EFI_NOT_READY; ++ request_token.message = &request_message; ++ ++ request_callback_done = 0; ++ status = efi_call_5 (b->create_event, ++ GRUB_EFI_EVT_NOTIFY_SIGNAL, ++ GRUB_EFI_TPL_CALLBACK, ++ grub_efi_http_request_callback, ++ NULL, ++ &request_token.event); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_free (request_data.url); ++ return grub_error (GRUB_ERR_IO, "Fail to create an event! status=0x%x\n", status); ++ } ++ ++ status = efi_call_2 (http->request, http, &request_token); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ efi_call_1 (b->close_event, request_token.event); ++ grub_free (request_data.url); ++ return grub_error (GRUB_ERR_IO, "Fail to send a request! status=0x%x\n", status); ++ } ++ /* TODO: Add Timeout */ ++ while (!request_callback_done) ++ efi_call_1(http->poll, http); ++ ++ response_data.status_code = GRUB_EFI_HTTP_STATUS_UNSUPPORTED_STATUS; ++ response_message.data.response = &response_data; ++ /* herader_count will be updated by the HTTP driver on response */ ++ response_message.header_count = 0; ++ /* headers will be populated by the driver on response */ ++ response_message.headers = NULL; ++ /* use zero BodyLength to only receive the response headers */ ++ response_message.body_length = 0; ++ response_message.body = NULL; ++ response_token.event = NULL; ++ ++ status = efi_call_5 (b->create_event, ++ GRUB_EFI_EVT_NOTIFY_SIGNAL, ++ GRUB_EFI_TPL_CALLBACK, ++ grub_efi_http_response_callback, ++ NULL, ++ &response_token.event); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ efi_call_1 (b->close_event, request_token.event); ++ grub_free (request_data.url); ++ return grub_error (GRUB_ERR_IO, "Fail to create an event! status=0x%x\n", status); ++ } ++ ++ response_token.status = GRUB_EFI_SUCCESS; ++ response_token.message = &response_message; ++ ++ /* wait for HTTP response */ ++ response_callback_done = 0; ++ status = efi_call_2 (http->response, http, &response_token); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ efi_call_1 (b->close_event, response_token.event); ++ efi_call_1 (b->close_event, request_token.event); ++ grub_free (request_data.url); ++ return grub_error (GRUB_ERR_IO, "Fail to receive a response! status=%d\n", (int)status); ++ } ++ ++ /* TODO: Add Timeout */ ++ while (!response_callback_done) ++ efi_call_1 (http->poll, http); ++ ++ if (response_message.data.response->status_code != GRUB_EFI_HTTP_STATUS_200_OK) ++ { ++ grub_efi_http_status_code_t status_code = response_message.data.response->status_code; ++ ++ if (response_message.headers) ++ efi_call_1 (b->free_pool, response_message.headers); ++ efi_call_1 (b->close_event, response_token.event); ++ efi_call_1 (b->close_event, request_token.event); ++ grub_free (request_data.url); ++ if (status_code == GRUB_EFI_HTTP_STATUS_404_NOT_FOUND) ++ { ++ return grub_error (GRUB_ERR_FILE_NOT_FOUND, _("file `%s' not found"), name); ++ } ++ else ++ { ++ return grub_error (GRUB_ERR_NET_UNKNOWN_ERROR, ++ _("unsupported uefi http status code 0x%x"), status_code); ++ } ++ } ++ ++ if (file_size) ++ { ++ int i; ++ /* parse the length of the file from the ContentLength header */ ++ for (*file_size = 0, i = 0; i < (int)response_message.header_count; ++i) ++ { ++ if (!grub_strcmp((const char*)response_message.headers[i].field_name, "Content-Length")) ++ { ++ *file_size = grub_strtoul((const char*)response_message.headers[i].field_value, 0, 10); ++ break; ++ } ++ } ++ } ++ ++ if (response_message.headers) ++ efi_call_1 (b->free_pool, response_message.headers); ++ efi_call_1 (b->close_event, response_token.event); ++ efi_call_1 (b->close_event, request_token.event); ++ grub_free (request_data.url); ++ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_ssize_t ++efihttp_read (struct grub_efi_net_device *dev, ++ char *buf, ++ grub_size_t len) ++{ ++ grub_efi_http_message_t response_message; ++ grub_efi_http_token_t response_token; ++ ++ grub_efi_status_t status; ++ grub_size_t sum = 0; ++ grub_efi_boot_services_t *b = grub_efi_system_table->boot_services; ++ grub_efi_http_t *http = dev->http; ++ ++ if (!len) ++ { ++ grub_error (GRUB_ERR_BUG, "Invalid arguments to EFI HTTP Read"); ++ return -1; ++ } ++ ++ efi_call_5 (b->create_event, ++ GRUB_EFI_EVT_NOTIFY_SIGNAL, ++ GRUB_EFI_TPL_CALLBACK, ++ grub_efi_http_response_callback, ++ NULL, ++ &response_token.event); ++ ++ while (len) ++ { ++ response_message.data.response = NULL; ++ response_message.header_count = 0; ++ response_message.headers = NULL; ++ response_message.body_length = len; ++ response_message.body = buf; ++ ++ response_token.message = &response_message; ++ response_token.status = GRUB_EFI_NOT_READY; ++ ++ response_callback_done = 0; ++ ++ status = efi_call_2 (http->response, http, &response_token); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ efi_call_1 (b->close_event, response_token.event); ++ grub_error (GRUB_ERR_IO, "Error! status=%d\n", (int)status); ++ return -1; ++ } ++ ++ while (!response_callback_done) ++ efi_call_1(http->poll, http); ++ ++ sum += response_message.body_length; ++ buf += response_message.body_length; ++ len -= response_message.body_length; ++ } ++ ++ efi_call_1 (b->close_event, response_token.event); ++ ++ return sum; ++} ++ ++static grub_err_t ++grub_efihttp_open (struct grub_efi_net_device *dev, ++ int prefer_ip6 __attribute__ ((unused)), ++ grub_file_t file, ++ const char *filename __attribute__ ((unused)), ++ int type) ++{ ++ grub_err_t err; ++ grub_off_t size; ++ char *buf; ++ ++ err = efihttp_request (dev->http, file->device->net->server, file->device->net->name, type, 1, 0); ++ if (err != GRUB_ERR_NONE) ++ return err; ++ ++ err = efihttp_request (dev->http, file->device->net->server, file->device->net->name, type, 0, &size); ++ if (err != GRUB_ERR_NONE) ++ return err; ++ ++ buf = grub_malloc (size); ++ efihttp_read (dev, buf, size); ++ ++ file->size = size; ++ file->data = buf; ++ file->not_easily_seekable = 0; ++ file->device->net->offset = 0; ++ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++grub_efihttp_close (struct grub_efi_net_device *dev __attribute__ ((unused)), ++ int prefer_ip6 __attribute__ ((unused)), ++ grub_file_t file) ++{ ++ if (file->data) ++ grub_free (file->data); ++ ++ file->data = 0; ++ file->offset = 0; ++ file->size = 0; ++ file->device->net->offset = 0; ++ return GRUB_ERR_NONE; ++} ++ ++static grub_ssize_t ++grub_efihttp_read (struct grub_efi_net_device *dev __attribute__((unused)), ++ int prefer_ip6 __attribute__((unused)), ++ grub_file_t file, ++ char *buf, ++ grub_size_t len) ++{ ++ grub_size_t r = len; ++ ++ if (!file->data || !buf || !len) ++ return 0; ++ ++ if ((file->device->net->offset + len) > file->size) ++ r = file->size - file->device->net->offset; ++ ++ if (r) ++ { ++ grub_memcpy (buf, (char *)file->data + file->device->net->offset, r); ++ file->device->net->offset += r; ++ } ++ ++ return r; ++} ++ ++struct grub_efi_net_io io_http = ++ { ++ .configure = http_configure, ++ .open = grub_efihttp_open, ++ .read = grub_efihttp_read, ++ .close = grub_efihttp_close ++ }; +diff --git a/grub-core/net/efi/ip4_config.c b/grub-core/net/efi/ip4_config.c +new file mode 100644 +index 0000000000..cbed31a21e +--- /dev/null ++++ b/grub-core/net/efi/ip4_config.c +@@ -0,0 +1,409 @@ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++char * ++grub_efi_hw_address_to_string (grub_efi_uint32_t hw_address_size, grub_efi_mac_address_t hw_address) ++{ ++ char *hw_addr, *p; ++ int s; ++ int i; ++ grub_size_t sz; ++ ++ if (grub_mul (hw_address_size, sizeof ("XX:") - 1, &sz) || ++ grub_add (sz, 1, &sz)) ++ return NULL; ++ ++ hw_addr = grub_malloc (sz); ++ if (!hw_addr) ++ return NULL; ++ ++ p = hw_addr; ++ s = sz; ++ for (i = 0; i < (int)hw_address_size; i++) ++ { ++ grub_snprintf (p, sz, "%02x:", hw_address[i]); ++ p += sizeof ("XX:") - 1; ++ s -= sizeof ("XX:") - 1; ++ } ++ ++ hw_addr[sz - 2] = '\0'; ++ return hw_addr; ++} ++ ++char * ++grub_efi_ip4_address_to_string (grub_efi_ipv4_address_t *address) ++{ ++ char *addr; ++ ++ addr = grub_malloc (sizeof ("XXX.XXX.XXX.XXX")); ++ if (!addr) ++ return NULL; ++ ++ /* FIXME: Use grub_xasprintf ? */ ++ grub_snprintf (addr, ++ sizeof ("XXX.XXX.XXX.XXX"), ++ "%u.%u.%u.%u", ++ (*address)[0], ++ (*address)[1], ++ (*address)[2], ++ (*address)[3]); ++ ++ return addr; ++} ++ ++int ++grub_efi_string_to_ip4_address (const char *val, grub_efi_ipv4_address_t *address, const char **rest) ++{ ++ grub_uint32_t newip = 0; ++ int i; ++ const char *ptr = val; ++ ++ for (i = 0; i < 4; i++) ++ { ++ unsigned long t; ++ t = grub_strtoul (ptr, (char **) &ptr, 0); ++ if (grub_errno) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ return 0; ++ } ++ if (*ptr != '.' && i == 0) ++ { ++ /* XXX: t is in host byte order */ ++ newip = t; ++ break; ++ } ++ if (t & ~0xff) ++ return 0; ++ newip <<= 8; ++ newip |= t; ++ if (i != 3 && *ptr != '.') ++ return 0; ++ ptr++; ++ } ++ ++ newip = grub_cpu_to_be32 (newip); ++ ++ grub_memcpy (address, &newip, sizeof(*address)); ++ ++ if (rest) ++ *rest = (ptr - 1); ++ return 1; ++} ++ ++static grub_efi_ip4_config2_interface_info_t * ++efi_ip4_config_interface_info (grub_efi_ip4_config2_protocol_t *ip4_config) ++{ ++ grub_efi_uintn_t sz; ++ grub_efi_status_t status; ++ grub_efi_ip4_config2_interface_info_t *interface_info; ++ ++ sz = sizeof (*interface_info) + sizeof (*interface_info->route_table); ++ interface_info = grub_malloc (sz); ++ if (!interface_info) ++ return NULL; ++ ++ status = efi_call_4 (ip4_config->get_data, ip4_config, ++ GRUB_EFI_IP4_CONFIG2_DATA_TYPE_INTERFACEINFO, ++ &sz, interface_info); ++ ++ if (status == GRUB_EFI_BUFFER_TOO_SMALL) ++ { ++ grub_free (interface_info); ++ interface_info = grub_malloc (sz); ++ status = efi_call_4 (ip4_config->get_data, ip4_config, ++ GRUB_EFI_IP4_CONFIG2_DATA_TYPE_INTERFACEINFO, ++ &sz, interface_info); ++ } ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_free (interface_info); ++ return NULL; ++ } ++ ++ return interface_info; ++} ++ ++static grub_efi_ip4_config2_manual_address_t * ++efi_ip4_config_manual_address (grub_efi_ip4_config2_protocol_t *ip4_config) ++{ ++ grub_efi_uintn_t sz; ++ grub_efi_status_t status; ++ grub_efi_ip4_config2_manual_address_t *manual_address; ++ ++ sz = sizeof (*manual_address); ++ manual_address = grub_malloc (sz); ++ if (!manual_address) ++ return NULL; ++ ++ status = efi_call_4 (ip4_config->get_data, ip4_config, ++ GRUB_EFI_IP4_CONFIG2_DATA_TYPE_MANUAL_ADDRESS, ++ &sz, manual_address); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_free (manual_address); ++ return NULL; ++ } ++ ++ return manual_address; ++} ++ ++char * ++grub_efi_ip4_interface_name (struct grub_efi_net_device *dev) ++{ ++ grub_efi_ip4_config2_interface_info_t *interface_info; ++ char *name; ++ ++ interface_info = efi_ip4_config_interface_info (dev->ip4_config); ++ ++ if (!interface_info) ++ return NULL; ++ ++ name = grub_malloc (GRUB_EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE ++ * GRUB_MAX_UTF8_PER_UTF16 + 1); ++ *grub_utf16_to_utf8 ((grub_uint8_t *)name, interface_info->name, ++ GRUB_EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE) = 0; ++ grub_free (interface_info); ++ return name; ++} ++ ++static char * ++grub_efi_ip4_interface_hw_address (struct grub_efi_net_device *dev) ++{ ++ grub_efi_ip4_config2_interface_info_t *interface_info; ++ char *hw_addr; ++ ++ interface_info = efi_ip4_config_interface_info (dev->ip4_config); ++ ++ if (!interface_info) ++ return NULL; ++ ++ hw_addr = grub_efi_hw_address_to_string (interface_info->hw_address_size, interface_info->hw_address); ++ grub_free (interface_info); ++ ++ return hw_addr; ++} ++ ++static char * ++grub_efi_ip4_interface_address (struct grub_efi_net_device *dev) ++{ ++ grub_efi_ip4_config2_manual_address_t *manual_address; ++ char *addr; ++ ++ manual_address = efi_ip4_config_manual_address (dev->ip4_config); ++ ++ if (!manual_address) ++ return NULL; ++ ++ addr = grub_efi_ip4_address_to_string (&manual_address->address); ++ grub_free (manual_address); ++ return addr; ++} ++ ++ ++static int ++address_mask_size (grub_efi_ipv4_address_t *address) ++{ ++ grub_uint8_t i; ++ grub_uint32_t u32_addr = grub_be_to_cpu32 (grub_get_unaligned32 (address)); ++ ++ if (u32_addr == 0) ++ return 0; ++ ++ for (i = 0; i < 32 ; ++i) ++ { ++ if (u32_addr == ((0xffffffff >> i) << i)) ++ return (32 - i); ++ } ++ ++ return -1; ++} ++ ++static char ** ++grub_efi_ip4_interface_route_table (struct grub_efi_net_device *dev) ++{ ++ grub_efi_ip4_config2_interface_info_t *interface_info; ++ char **ret; ++ int i, id; ++ grub_size_t sz; ++ ++ interface_info = efi_ip4_config_interface_info (dev->ip4_config); ++ if (!interface_info) ++ return NULL; ++ ++ if (grub_add (interface_info->route_table_size, 1, &sz)) ++ { ++ grub_free (interface_info); ++ return NULL; ++ } ++ ++ ret = grub_calloc (sz, sizeof (*ret)); ++ ++ if (!ret) ++ { ++ grub_free (interface_info); ++ return NULL; ++ } ++ ++ id = 0; ++ for (i = 0; i < (int)interface_info->route_table_size; i++) ++ { ++ char *subnet, *gateway, *mask; ++ grub_uint32_t u32_subnet, u32_gateway; ++ int mask_size; ++ grub_efi_ip4_route_table_t *route_table = interface_info->route_table + i; ++ grub_efi_net_interface_t *inf; ++ char *interface_name = NULL; ++ ++ for (inf = dev->net_interfaces; inf; inf = inf->next) ++ if (!inf->prefer_ip6) ++ interface_name = inf->name; ++ ++ u32_gateway = grub_get_unaligned32 (&route_table->gateway_address); ++ gateway = grub_efi_ip4_address_to_string (&route_table->gateway_address); ++ u32_subnet = grub_get_unaligned32 (&route_table->subnet_address); ++ subnet = grub_efi_ip4_address_to_string (&route_table->subnet_address); ++ mask_size = address_mask_size (&route_table->subnet_mask); ++ mask = grub_efi_ip4_address_to_string (&route_table->subnet_mask); ++ if (u32_subnet && !u32_gateway && interface_name) ++ ret[id++] = grub_xasprintf ("%s:local %s/%d %s", dev->card_name, subnet, mask_size, interface_name); ++ else if (u32_subnet && u32_gateway) ++ ret[id++] = grub_xasprintf ("%s:gw %s/%d gw %s", dev->card_name, subnet, mask_size, gateway); ++ else if (!u32_subnet && u32_gateway) ++ ret[id++] = grub_xasprintf ("%s:default %s/%d gw %s", dev->card_name, subnet, mask_size, gateway); ++ grub_free (subnet); ++ grub_free (gateway); ++ grub_free (mask); ++ } ++ ++ ret[id] = NULL; ++ grub_free (interface_info); ++ return ret; ++} ++ ++static grub_efi_net_interface_t * ++grub_efi_ip4_interface_match (struct grub_efi_net_device *dev, grub_efi_net_ip_address_t *ip_address) ++{ ++ grub_efi_ip4_config2_interface_info_t *interface_info; ++ grub_efi_net_interface_t *inf; ++ int i; ++ grub_efi_ipv4_address_t *address = &ip_address->ip4; ++ ++ interface_info = efi_ip4_config_interface_info (dev->ip4_config); ++ if (!interface_info) ++ return NULL; ++ ++ for (i = 0; i < (int)interface_info->route_table_size; i++) ++ { ++ grub_efi_ip4_route_table_t *route_table = interface_info->route_table + i; ++ grub_uint32_t u32_address, u32_mask, u32_subnet; ++ ++ u32_address = grub_get_unaligned32 (address); ++ u32_subnet = grub_get_unaligned32 (route_table->subnet_address); ++ u32_mask = grub_get_unaligned32 (route_table->subnet_mask); ++ ++ /* SKIP Default GATEWAY */ ++ if (!u32_subnet && !u32_mask) ++ continue; ++ ++ if ((u32_address & u32_mask) == u32_subnet) ++ { ++ for (inf = dev->net_interfaces; inf; inf = inf->next) ++ if (!inf->prefer_ip6) ++ { ++ grub_free (interface_info); ++ return inf; ++ } ++ } ++ } ++ ++ grub_free (interface_info); ++ return NULL; ++} ++ ++static int ++grub_efi_ip4_interface_set_manual_address (struct grub_efi_net_device *dev, ++ grub_efi_net_ip_manual_address_t *net_ip, ++ int with_subnet) ++{ ++ grub_efi_status_t status; ++ grub_efi_ip4_config2_manual_address_t *address = &net_ip->ip4; ++ ++ if (!with_subnet) ++ { ++ grub_efi_ip4_config2_manual_address_t *manual_address = ++ efi_ip4_config_manual_address (dev->ip4_config); ++ ++ if (manual_address) ++ { ++ grub_memcpy (address->subnet_mask, manual_address->subnet_mask, sizeof(address->subnet_mask)); ++ grub_free (manual_address); ++ } ++ else ++ { ++ /* XXX: */ ++ address->subnet_mask[0] = 0xff; ++ address->subnet_mask[1] = 0xff; ++ address->subnet_mask[2] = 0xff; ++ address->subnet_mask[3] = 0; ++ } ++ } ++ ++ status = efi_call_4 (dev->ip4_config->set_data, dev->ip4_config, ++ GRUB_EFI_IP4_CONFIG2_DATA_TYPE_MANUAL_ADDRESS, ++ sizeof(*address), address); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ return 1; ++} ++ ++static int ++grub_efi_ip4_interface_set_gateway (struct grub_efi_net_device *dev, ++ grub_efi_net_ip_address_t *address) ++{ ++ grub_efi_status_t status; ++ ++ status = efi_call_4 (dev->ip4_config->set_data, dev->ip4_config, ++ GRUB_EFI_IP4_CONFIG2_DATA_TYPE_GATEWAY, ++ sizeof (address->ip4), &address->ip4); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ return 1; ++} ++ ++/* FIXME: Multiple DNS */ ++static int ++grub_efi_ip4_interface_set_dns (struct grub_efi_net_device *dev, ++ grub_efi_net_ip_address_t *address) ++{ ++ grub_efi_status_t status; ++ ++ status = efi_call_4 (dev->ip4_config->set_data, dev->ip4_config, ++ GRUB_EFI_IP4_CONFIG2_DATA_TYPE_DNSSERVER, ++ sizeof (address->ip4), &address->ip4); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ return 1; ++} ++ ++grub_efi_net_ip_config_t *efi_net_ip4_config = &(grub_efi_net_ip_config_t) ++ { ++ .get_hw_address = grub_efi_ip4_interface_hw_address, ++ .get_address = grub_efi_ip4_interface_address, ++ .get_route_table = grub_efi_ip4_interface_route_table, ++ .best_interface = grub_efi_ip4_interface_match, ++ .set_address = grub_efi_ip4_interface_set_manual_address, ++ .set_gateway = grub_efi_ip4_interface_set_gateway, ++ .set_dns = grub_efi_ip4_interface_set_dns ++ }; +diff --git a/grub-core/net/efi/ip6_config.c b/grub-core/net/efi/ip6_config.c +new file mode 100644 +index 0000000000..df92b69d42 +--- /dev/null ++++ b/grub-core/net/efi/ip6_config.c +@@ -0,0 +1,430 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++char * ++grub_efi_ip6_address_to_string (grub_efi_pxe_ipv6_address_t *address) ++{ ++ char *str = grub_malloc (sizeof ("XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX")); ++ char *p; ++ int i; ++ int squash; ++ ++ if (!str) ++ return NULL; ++ ++ p = str; ++ squash = 0; ++ for (i = 0; i < 8; ++i) ++ { ++ grub_uint16_t addr; ++ ++ if (i == 7) ++ squash = 2; ++ ++ addr = grub_get_unaligned16 (address->addr + i * 2); ++ ++ if (grub_be_to_cpu16 (addr)) ++ { ++ char buf[sizeof ("XXXX")]; ++ if (i > 0) ++ *p++ = ':'; ++ grub_snprintf (buf, sizeof (buf), "%x", grub_be_to_cpu16 (addr)); ++ grub_strcpy (p, buf); ++ p += grub_strlen (buf); ++ ++ if (squash == 1) ++ squash = 2; ++ } ++ else ++ { ++ if (squash == 0) ++ { ++ *p++ = ':'; ++ squash = 1; ++ } ++ else if (squash == 2) ++ { ++ *p++ = ':'; ++ *p++ = '0'; ++ } ++ } ++ } ++ *p = '\0'; ++ return str; ++} ++ ++int ++grub_efi_string_to_ip6_address (const char *val, grub_efi_ipv6_address_t *address, const char **rest) ++{ ++ grub_uint16_t newip[8]; ++ const char *ptr = val; ++ int word, quaddot = -1; ++ int bracketed = 0; ++ ++ if (ptr[0] == '[') { ++ bracketed = 1; ++ ptr++; ++ } ++ ++ if (ptr[0] == ':' && ptr[1] != ':') ++ return 0; ++ if (ptr[0] == ':') ++ ptr++; ++ ++ for (word = 0; word < 8; word++) ++ { ++ unsigned long t; ++ if (*ptr == ':') ++ { ++ quaddot = word; ++ word--; ++ ptr++; ++ continue; ++ } ++ t = grub_strtoul (ptr, (char **) &ptr, 16); ++ if (grub_errno) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ break; ++ } ++ if (t & ~0xffff) ++ return 0; ++ newip[word] = grub_cpu_to_be16 (t); ++ if (*ptr != ':') ++ break; ++ ptr++; ++ } ++ if (quaddot == -1 && word < 7) ++ return 0; ++ if (quaddot != -1) ++ { ++ grub_memmove (&newip[quaddot + 7 - word], &newip[quaddot], ++ (word - quaddot + 1) * sizeof (newip[0])); ++ grub_memset (&newip[quaddot], 0, (7 - word) * sizeof (newip[0])); ++ } ++ grub_memcpy (address, newip, 16); ++ if (bracketed && *ptr == ']') { ++ ptr++; ++ } ++ if (rest) ++ *rest = ptr; ++ return 1; ++} ++ ++static grub_efi_ip6_config_interface_info_t * ++efi_ip6_config_interface_info (grub_efi_ip6_config_protocol_t *ip6_config) ++{ ++ grub_efi_uintn_t sz; ++ grub_efi_status_t status; ++ grub_efi_ip6_config_interface_info_t *interface_info; ++ ++ sz = sizeof (*interface_info) + sizeof (*interface_info->route_table); ++ interface_info = grub_malloc (sz); ++ ++ status = efi_call_4 (ip6_config->get_data, ip6_config, ++ GRUB_EFI_IP6_CONFIG_DATA_TYPE_INTERFACEINFO, ++ &sz, interface_info); ++ ++ if (status == GRUB_EFI_BUFFER_TOO_SMALL) ++ { ++ grub_free (interface_info); ++ interface_info = grub_malloc (sz); ++ status = efi_call_4 (ip6_config->get_data, ip6_config, ++ GRUB_EFI_IP6_CONFIG_DATA_TYPE_INTERFACEINFO, ++ &sz, interface_info); ++ } ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_free (interface_info); ++ return NULL; ++ } ++ ++ return interface_info; ++} ++ ++static grub_efi_ip6_config_manual_address_t * ++efi_ip6_config_manual_address (grub_efi_ip6_config_protocol_t *ip6_config) ++{ ++ grub_efi_uintn_t sz; ++ grub_efi_status_t status; ++ grub_efi_ip6_config_manual_address_t *manual_address; ++ ++ sz = sizeof (*manual_address); ++ manual_address = grub_malloc (sz); ++ if (!manual_address) ++ return NULL; ++ ++ status = efi_call_4 (ip6_config->get_data, ip6_config, ++ GRUB_EFI_IP6_CONFIG_DATA_TYPE_MANUAL_ADDRESS, ++ &sz, manual_address); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_free (manual_address); ++ return NULL; ++ } ++ ++ return manual_address; ++} ++ ++char * ++grub_efi_ip6_interface_name (struct grub_efi_net_device *dev) ++{ ++ grub_efi_ip6_config_interface_info_t *interface_info; ++ char *name; ++ ++ interface_info = efi_ip6_config_interface_info (dev->ip6_config); ++ ++ if (!interface_info) ++ return NULL; ++ ++ name = grub_malloc (GRUB_EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE ++ * GRUB_MAX_UTF8_PER_UTF16 + 1); ++ *grub_utf16_to_utf8 ((grub_uint8_t *)name, interface_info->name, ++ GRUB_EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE) = 0; ++ grub_free (interface_info); ++ return name; ++} ++ ++static char * ++grub_efi_ip6_interface_hw_address (struct grub_efi_net_device *dev) ++{ ++ grub_efi_ip6_config_interface_info_t *interface_info; ++ char *hw_addr; ++ ++ interface_info = efi_ip6_config_interface_info (dev->ip6_config); ++ ++ if (!interface_info) ++ return NULL; ++ ++ hw_addr = grub_efi_hw_address_to_string (interface_info->hw_address_size, interface_info->hw_address); ++ grub_free (interface_info); ++ ++ return hw_addr; ++} ++ ++static char * ++grub_efi_ip6_interface_address (struct grub_efi_net_device *dev) ++{ ++ grub_efi_ip6_config_manual_address_t *manual_address; ++ char *addr; ++ ++ manual_address = efi_ip6_config_manual_address (dev->ip6_config); ++ ++ if (!manual_address) ++ return NULL; ++ ++ addr = grub_efi_ip6_address_to_string ((grub_efi_pxe_ipv6_address_t *)&manual_address->address); ++ grub_free (manual_address); ++ return addr; ++} ++ ++static char ** ++grub_efi_ip6_interface_route_table (struct grub_efi_net_device *dev) ++{ ++ grub_efi_ip6_config_interface_info_t *interface_info; ++ char **ret; ++ int i, id; ++ grub_size_t sz; ++ ++ interface_info = efi_ip6_config_interface_info (dev->ip6_config); ++ if (!interface_info) ++ return NULL; ++ ++ if (grub_add (interface_info->route_count, 1, &sz)) ++ { ++ grub_free (interface_info); ++ return NULL; ++ } ++ ++ ret = grub_calloc (sz, sizeof (*ret)); ++ ++ if (!ret) ++ { ++ grub_free (interface_info); ++ return NULL; ++ } ++ ++ id = 0; ++ for (i = 0; i < (int)interface_info->route_count ; i++) ++ { ++ char *gateway, *destination; ++ grub_uint64_t u64_gateway[2]; ++ grub_uint64_t u64_destination[2]; ++ grub_efi_ip6_route_table_t *route_table = interface_info->route_table + i; ++ grub_efi_net_interface_t *inf; ++ char *interface_name = NULL; ++ ++ gateway = grub_efi_ip6_address_to_string (&route_table->gateway); ++ destination = grub_efi_ip6_address_to_string (&route_table->destination); ++ ++ u64_gateway[0] = grub_get_unaligned64 (route_table->gateway.addr); ++ u64_gateway[1] = grub_get_unaligned64 (route_table->gateway.addr + 8); ++ u64_destination[0] = grub_get_unaligned64 (route_table->destination.addr); ++ u64_destination[1] = grub_get_unaligned64 (route_table->destination.addr + 8); ++ ++ for (inf = dev->net_interfaces; inf; inf = inf->next) ++ if (inf->prefer_ip6) ++ interface_name = inf->name; ++ ++ if ((!u64_gateway[0] && !u64_gateway[1]) ++ && (u64_destination[0] || u64_destination[1])) ++ { ++ if (interface_name) ++ { ++ if ((grub_be_to_cpu64 (u64_destination[0]) == 0xfe80000000000000ULL) ++ && (!u64_destination[1]) ++ && (route_table->prefix_length == 64)) ++ ret[id++] = grub_xasprintf ("%s:link %s/%d %s", dev->card_name, destination, route_table->prefix_length, interface_name); ++ else ++ ret[id++] = grub_xasprintf ("%s:local %s/%d %s", dev->card_name, destination, route_table->prefix_length, interface_name); ++ } ++ } ++ else if ((u64_gateway[0] || u64_gateway[1]) ++ && (u64_destination[0] || u64_destination[1])) ++ ret[id++] = grub_xasprintf ("%s:gw %s/%d gw %s", dev->card_name, destination, route_table->prefix_length, gateway); ++ else if ((u64_gateway[0] || u64_gateway[1]) ++ && (!u64_destination[0] && !u64_destination[1])) ++ ret[id++] = grub_xasprintf ("%s:default %s/%d gw %s", dev->card_name, destination, route_table->prefix_length, gateway); ++ ++ grub_free (gateway); ++ grub_free (destination); ++ } ++ ++ ret[id] = NULL; ++ grub_free (interface_info); ++ return ret; ++} ++ ++static grub_efi_net_interface_t * ++grub_efi_ip6_interface_match (struct grub_efi_net_device *dev, grub_efi_net_ip_address_t *ip_address) ++{ ++ grub_efi_ip6_config_interface_info_t *interface_info; ++ grub_efi_net_interface_t *inf; ++ int i; ++ grub_efi_ipv6_address_t *address = &ip_address->ip6; ++ ++ interface_info = efi_ip6_config_interface_info (dev->ip6_config); ++ if (!interface_info) ++ return NULL; ++ ++ for (i = 0; i < (int)interface_info->route_count ; i++) ++ { ++ grub_uint64_t u64_addr[2]; ++ grub_uint64_t u64_subnet[2]; ++ grub_uint64_t u64_mask[2]; ++ ++ grub_efi_ip6_route_table_t *route_table = interface_info->route_table + i; ++ ++ /* SKIP Default GATEWAY */ ++ if (route_table->prefix_length == 0) ++ continue; ++ ++ u64_addr[0] = grub_get_unaligned64 (address); ++ u64_addr[1] = grub_get_unaligned64 (address + 4); ++ u64_subnet[0] = grub_get_unaligned64 (route_table->destination.addr); ++ u64_subnet[1] = grub_get_unaligned64 (route_table->destination.addr + 8); ++ u64_mask[0] = (route_table->prefix_length <= 64) ? ++ 0xffffffffffffffffULL << (64 - route_table->prefix_length) : ++ 0xffffffffffffffffULL; ++ u64_mask[1] = (route_table->prefix_length <= 64) ? ++ 0 : ++ 0xffffffffffffffffULL << (128 - route_table->prefix_length); ++ ++ if (((u64_addr[0] & u64_mask[0]) == u64_subnet[0]) ++ && ((u64_addr[1] & u64_mask[1]) == u64_subnet[1])) ++ { ++ for (inf = dev->net_interfaces; inf; inf = inf->next) ++ if (inf->prefer_ip6) ++ { ++ grub_free (interface_info); ++ return inf; ++ } ++ } ++ } ++ ++ grub_free (interface_info); ++ return NULL; ++} ++ ++static int ++grub_efi_ip6_interface_set_manual_address (struct grub_efi_net_device *dev, ++ grub_efi_net_ip_manual_address_t *net_ip, ++ int with_subnet) ++{ ++ grub_efi_status_t status; ++ grub_efi_ip6_config_manual_address_t *address = &net_ip->ip6; ++ ++ if (!with_subnet) ++ { ++ grub_efi_ip6_config_manual_address_t *manual_address = ++ efi_ip6_config_manual_address (dev->ip6_config); ++ ++ if (manual_address) ++ { ++ address->prefix_length = manual_address->prefix_length; ++ grub_free (manual_address); ++ } ++ else ++ { ++ /* XXX: */ ++ address->prefix_length = 64; ++ } ++ } ++ ++ status = efi_call_4 (dev->ip6_config->set_data, dev->ip6_config, ++ GRUB_EFI_IP6_CONFIG_DATA_TYPE_MANUAL_ADDRESS, ++ sizeof(*address), address); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ return 1; ++} ++ ++static int ++grub_efi_ip6_interface_set_gateway (struct grub_efi_net_device *dev, ++ grub_efi_net_ip_address_t *address) ++{ ++ grub_efi_status_t status; ++ ++ status = efi_call_4 (dev->ip6_config->set_data, dev->ip6_config, ++ GRUB_EFI_IP6_CONFIG_DATA_TYPE_GATEWAY, ++ sizeof (address->ip6), &address->ip6); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ return 1; ++} ++ ++static int ++grub_efi_ip6_interface_set_dns (struct grub_efi_net_device *dev, ++ grub_efi_net_ip_address_t *address) ++{ ++ ++ grub_efi_status_t status; ++ ++ status = efi_call_4 (dev->ip6_config->set_data, dev->ip6_config, ++ GRUB_EFI_IP6_CONFIG_DATA_TYPE_DNSSERVER, ++ sizeof (address->ip6), &address->ip6); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ return 1; ++} ++ ++grub_efi_net_ip_config_t *efi_net_ip6_config = &(grub_efi_net_ip_config_t) ++ { ++ .get_hw_address = grub_efi_ip6_interface_hw_address, ++ .get_address = grub_efi_ip6_interface_address, ++ .get_route_table = grub_efi_ip6_interface_route_table, ++ .best_interface = grub_efi_ip6_interface_match, ++ .set_address = grub_efi_ip6_interface_set_manual_address, ++ .set_gateway = grub_efi_ip6_interface_set_gateway, ++ .set_dns = grub_efi_ip6_interface_set_dns ++ }; +diff --git a/grub-core/net/efi/net.c b/grub-core/net/efi/net.c +new file mode 100644 +index 0000000000..2fe5fb63ca +--- /dev/null ++++ b/grub-core/net/efi/net.c +@@ -0,0 +1,1440 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++GRUB_MOD_LICENSE ("GPLv3+"); ++ ++#define GRUB_EFI_IP6_PREFIX_LENGTH 64 ++ ++static grub_efi_guid_t ip4_config_guid = GRUB_EFI_IP4_CONFIG2_PROTOCOL_GUID; ++static grub_efi_guid_t ip6_config_guid = GRUB_EFI_IP6_CONFIG_PROTOCOL_GUID; ++static grub_efi_guid_t http_service_binding_guid = GRUB_EFI_HTTP_SERVICE_BINDING_PROTOCOL_GUID; ++static grub_efi_guid_t http_guid = GRUB_EFI_HTTP_PROTOCOL_GUID; ++static grub_efi_guid_t pxe_io_guid = GRUB_EFI_PXE_GUID; ++static grub_efi_guid_t dhcp4_service_binding_guid = GRUB_EFI_DHCP4_SERVICE_BINDING_PROTOCOL_GUID; ++static grub_efi_guid_t dhcp4_guid = GRUB_EFI_DHCP4_PROTOCOL_GUID; ++static grub_efi_guid_t dhcp6_service_binding_guid = GRUB_EFI_DHCP6_SERVICE_BINDING_PROTOCOL_GUID; ++static grub_efi_guid_t dhcp6_guid = GRUB_EFI_DHCP6_PROTOCOL_GUID; ++ ++struct grub_efi_net_device *net_devices; ++ ++static char *default_server; ++static grub_efi_net_interface_t *net_interface; ++static grub_efi_net_interface_t *net_default_interface; ++ ++#define efi_net_interface_configure(inf) inf->io->configure (inf->dev, inf->prefer_ip6) ++#define efi_net_interface_open(inf, file, name) inf->io->open (inf->dev, inf->prefer_ip6, file, name, inf->io_type) ++#define efi_net_interface_read(inf, file, buf, sz) inf->io->read (inf->dev, inf->prefer_ip6, file, buf, sz) ++#define efi_net_interface_close(inf, file) inf->io->close (inf->dev, inf->prefer_ip6, file) ++#define efi_net_interface(m,...) efi_net_interface_ ## m (net_interface, ## __VA_ARGS__) ++ ++static grub_efi_handle_t ++grub_efi_locate_device_path (grub_efi_guid_t *protocol, grub_efi_device_path_t *device_path, ++ grub_efi_device_path_t **r_device_path) ++{ ++ grub_efi_handle_t handle; ++ grub_efi_status_t status; ++ ++ status = efi_call_3 (grub_efi_system_table->boot_services->locate_device_path, ++ protocol, &device_path, &handle); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ if (r_device_path) ++ *r_device_path = device_path; ++ ++ return handle; ++} ++ ++static int ++url_parse_fields (const char *url, char **proto, char **host, char **path) ++{ ++ const char *p, *ps; ++ grub_size_t l; ++ ++ *proto = *host = *path = NULL; ++ ps = p = url; ++ ++ while ((p = grub_strchr (p, ':'))) ++ { ++ if (grub_strlen (p) < sizeof ("://") - 1) ++ break; ++ if (grub_memcmp (p, "://", sizeof ("://") - 1) == 0) ++ { ++ l = p - ps; ++ *proto = grub_malloc (l + 1); ++ if (!*proto) ++ { ++ grub_print_error (); ++ return 0; ++ } ++ ++ grub_memcpy (*proto, ps, l); ++ (*proto)[l] = '\0'; ++ p += sizeof ("://") - 1; ++ break; ++ } ++ ++p; ++ } ++ ++ if (!*proto) ++ { ++ grub_dprintf ("bootp", "url: %s is not valid, protocol not found\n", url); ++ return 0; ++ } ++ ++ ps = p; ++ p = grub_strchr (p, '/'); ++ ++ if (!p) ++ { ++ grub_dprintf ("bootp", "url: %s is not valid, host/path not found\n", url); ++ grub_free (*proto); ++ *proto = NULL; ++ return 0; ++ } ++ ++ l = p - ps; ++ ++ if (l > 2 && ps[0] == '[' && ps[l - 1] == ']') ++ { ++ *host = grub_malloc (l - 1); ++ if (!*host) ++ { ++ grub_print_error (); ++ grub_free (*proto); ++ *proto = NULL; ++ return 0; ++ } ++ grub_memcpy (*host, ps + 1, l - 2); ++ (*host)[l - 2] = 0; ++ } ++ else ++ { ++ *host = grub_malloc (l + 1); ++ if (!*host) ++ { ++ grub_print_error (); ++ grub_free (*proto); ++ *proto = NULL; ++ return 0; ++ } ++ grub_memcpy (*host, ps, l); ++ (*host)[l] = 0; ++ } ++ ++ *path = grub_strdup (p); ++ if (!*path) ++ { ++ grub_print_error (); ++ grub_free (*host); ++ grub_free (*proto); ++ *host = NULL; ++ *proto = NULL; ++ return 0; ++ } ++ return 1; ++} ++ ++static void ++url_get_boot_location (const char *url, char **device, char **path, int is_default) ++{ ++ char *protocol, *server, *file; ++ char *slash; ++ ++ if (!url_parse_fields (url, &protocol, &server, &file)) ++ return; ++ ++ if ((slash = grub_strrchr (file, '/'))) ++ *slash = 0; ++ else ++ *file = 0; ++ ++ *device = grub_xasprintf ("%s,%s", protocol, server); ++ *path = grub_strdup(file); ++ ++ if (is_default) ++ default_server = server; ++ else ++ grub_free (server); ++ ++ grub_free (protocol); ++ grub_free (file); ++} ++ ++static void ++pxe_get_boot_location (const struct grub_net_bootp_packet *bp, ++ char **device, ++ char **path, ++ int is_default) ++{ ++ char *server = grub_xasprintf ("%d.%d.%d.%d", ++ ((grub_uint8_t *) &bp->server_ip)[0], ++ ((grub_uint8_t *) &bp->server_ip)[1], ++ ((grub_uint8_t *) &bp->server_ip)[2], ++ ((grub_uint8_t *) &bp->server_ip)[3]); ++ ++ *device = grub_xasprintf ("tftp,%s", server); ++ ++ *path = grub_strndup (bp->boot_file, sizeof (bp->boot_file)); ++ ++ if (*path) ++ { ++ char *slash; ++ slash = grub_strrchr (*path, '/'); ++ if (slash) ++ *slash = 0; ++ else ++ **path = 0; ++ } ++ ++ if (is_default) ++ default_server = server; ++ else ++ grub_free (server); ++} ++ ++static void ++pxe_get_boot_location_v6 (const struct grub_net_dhcp6_packet *dp, ++ grub_size_t dhcp_size, ++ char **device, ++ char **path) ++{ ++ ++ struct grub_net_dhcp6_option *dhcp_opt; ++ grub_size_t dhcp_remain_size; ++ *device = *path = 0; ++ ++ if (dhcp_size < sizeof (*dp)) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("DHCPv6 packet size too small")); ++ return; ++ } ++ ++ dhcp_remain_size = dhcp_size - sizeof (*dp); ++ dhcp_opt = (struct grub_net_dhcp6_option *)dp->dhcp_options; ++ ++ while (dhcp_remain_size) ++ { ++ grub_uint16_t code = grub_be_to_cpu16 (dhcp_opt->code); ++ grub_uint16_t len = grub_be_to_cpu16 (dhcp_opt->len); ++ grub_uint16_t option_size = sizeof (*dhcp_opt) + len; ++ ++ if (dhcp_remain_size < option_size || code == 0) ++ break; ++ ++ if (code == GRUB_NET_DHCP6_OPTION_BOOTFILE_URL) ++ { ++ char *url; ++ grub_size_t sz; ++ ++ if (grub_add (len, 1, &sz)) ++ return; ++ ++ url = grub_malloc (sz); ++ if (!url) ++ return; ++ ++ grub_memcpy (url, dhcp_opt->data, len); ++ url[len] = 0; ++ ++ url_get_boot_location ((const char *)url, device, path, 1); ++ grub_free (url); ++ break; ++ } ++ ++ dhcp_remain_size -= option_size; ++ dhcp_opt = (struct grub_net_dhcp6_option *)((grub_uint8_t *)dhcp_opt + option_size); ++ } ++} ++ ++static grub_efi_net_interface_t * ++grub_efi_net_config_from_device_path (grub_efi_device_path_t *dp, ++ struct grub_efi_net_device *netdev, ++ char **device, ++ char **path) ++{ ++ grub_efi_net_interface_t *inf = NULL; ++ ++ while (1) ++ { ++ grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp); ++ grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp); ++ grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (dp); ++ ++ if (type == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE) ++ { ++ if (subtype == GRUB_EFI_URI_DEVICE_PATH_SUBTYPE) ++ { ++ grub_efi_uri_device_path_t *uri_dp; ++ uri_dp = (grub_efi_uri_device_path_t *) dp; ++ /* Beware that uri_dp->uri may not be null terminated */ ++ url_get_boot_location ((const char *)uri_dp->uri, device, path, 1); ++ } ++ else if (subtype == GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE) ++ { ++ grub_efi_net_ip_manual_address_t net_ip; ++ grub_efi_ipv4_device_path_t *ipv4 = (grub_efi_ipv4_device_path_t *) dp; ++ ++ if (inf) ++ continue; ++ grub_memcpy (net_ip.ip4.address, ipv4->local_ip_address, sizeof (net_ip.ip4.address)); ++ grub_memcpy (net_ip.ip4.subnet_mask, ipv4->subnet_mask, sizeof (net_ip.ip4.subnet_mask)); ++ net_ip.is_ip6 = 0; ++ inf = grub_efi_net_create_interface (netdev, ++ netdev->card_name, ++ &net_ip, ++ 1); ++ } ++ else if (subtype == GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE) ++ { ++ grub_efi_net_ip_manual_address_t net_ip; ++ grub_efi_ipv6_device_path_t *ipv6 = (grub_efi_ipv6_device_path_t *) dp; ++ ++ if (inf) ++ continue; ++ grub_memcpy (net_ip.ip6.address, ipv6->local_ip_address, sizeof (net_ip.ip6.address)); ++ net_ip.ip6.prefix_length = GRUB_EFI_IP6_PREFIX_LENGTH; ++ net_ip.ip6.is_anycast = 0; ++ net_ip.is_ip6 = 1; ++ inf = grub_efi_net_create_interface (netdev, ++ netdev->card_name, ++ &net_ip, ++ 1); ++ } ++ } ++ ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) ++ break; ++ dp = (grub_efi_device_path_t *) ((char *) dp + len); ++ } ++ ++ return inf; ++} ++ ++static grub_efi_net_interface_t * ++grub_efi_net_config_from_handle (grub_efi_handle_t *hnd, ++ struct grub_efi_net_device *netdev, ++ char **device, ++ char **path) ++{ ++ grub_efi_pxe_t *pxe = NULL; ++ ++ if (hnd == netdev->ip4_pxe_handle) ++ pxe = netdev->ip4_pxe; ++ else if (hnd == netdev->ip6_pxe_handle) ++ pxe = netdev->ip6_pxe; ++ ++ if (!pxe) ++ return (grub_efi_net_config_from_device_path ( ++ grub_efi_get_device_path (hnd), ++ netdev, ++ device, ++ path)); ++ ++ if (pxe->mode->using_ipv6) ++ { ++ grub_efi_net_ip_manual_address_t net_ip; ++ ++ pxe_get_boot_location_v6 ( ++ (const struct grub_net_dhcp6_packet *) &pxe->mode->dhcp_ack, ++ sizeof (pxe->mode->dhcp_ack), ++ device, ++ path); ++ ++ grub_memcpy (net_ip.ip6.address, pxe->mode->station_ip.v6.addr, sizeof(net_ip.ip6.address)); ++ net_ip.ip6.prefix_length = GRUB_EFI_IP6_PREFIX_LENGTH; ++ net_ip.ip6.is_anycast = 0; ++ net_ip.is_ip6 = 1; ++ return (grub_efi_net_create_interface (netdev, ++ netdev->card_name, ++ &net_ip, ++ 1)); ++ } ++ else ++ { ++ grub_efi_net_ip_manual_address_t net_ip; ++ ++ pxe_get_boot_location ( ++ (const struct grub_net_bootp_packet *) &pxe->mode->dhcp_ack, ++ device, ++ path, ++ 1); ++ ++ grub_memcpy (net_ip.ip4.address, pxe->mode->station_ip.v4.addr, sizeof (net_ip.ip4.address)); ++ grub_memcpy (net_ip.ip4.subnet_mask, pxe->mode->subnet_mask.v4.addr, sizeof (net_ip.ip4.subnet_mask)); ++ net_ip.is_ip6 = 0; ++ return (grub_efi_net_create_interface (netdev, ++ netdev->card_name, ++ &net_ip, ++ 1)); ++ } ++} ++ ++static const char * ++grub_efi_net_var_get_address (struct grub_env_var *var, ++ const char *val __attribute__ ((unused))) ++{ ++ struct grub_efi_net_device *dev; ++ ++ for (dev = net_devices; dev; dev = dev->next) ++ { ++ grub_efi_net_interface_t *inf; ++ ++ for (inf = dev->net_interfaces; inf; inf = inf->next) ++ { ++ char *var_name; ++ ++ var_name = grub_xasprintf ("net_%s_ip", inf->name); ++ if (grub_strcmp (var_name, var->name) == 0) ++ return efi_net_interface_get_address (inf); ++ grub_free (var_name); ++ var_name = grub_xasprintf ("net_%s_mac", inf->name); ++ if (grub_strcmp (var_name, var->name) == 0) ++ return efi_net_interface_get_hw_address (inf); ++ grub_free (var_name); ++ } ++ } ++ ++ return NULL; ++} ++ ++static char * ++grub_efi_net_var_set_interface (struct grub_env_var *var __attribute__ ((unused)), ++ const char *val) ++{ ++ struct grub_efi_net_device *dev; ++ grub_efi_net_interface_t *inf; ++ ++ for (dev = net_devices; dev; dev = dev->next) ++ for (inf = dev->net_interfaces; inf; inf = inf->next) ++ if (grub_strcmp (inf->name, val) == 0) ++ { ++ net_default_interface = inf; ++ return grub_strdup (val); ++ } ++ ++ return NULL; ++} ++ ++static char * ++grub_efi_net_var_set_server (struct grub_env_var *var __attribute__ ((unused)), ++ const char *val) ++{ ++ grub_free (default_server); ++ default_server = grub_strdup (val); ++ return grub_strdup (val); ++} ++ ++static const char * ++grub_efi_net_var_get_server (struct grub_env_var *var __attribute__ ((unused)), ++ const char *val __attribute__ ((unused))) ++{ ++ return default_server ? : ""; ++} ++ ++static const char * ++grub_efi_net_var_get_ip (struct grub_env_var *var __attribute__ ((unused)), ++ const char *val __attribute__ ((unused))) ++{ ++ const char *intf = grub_env_get ("net_default_interface"); ++ const char *ret = NULL; ++ if (intf) ++ { ++ char *buf = grub_xasprintf ("net_%s_ip", intf); ++ if (buf) ++ ret = grub_env_get (buf); ++ grub_free (buf); ++ } ++ return ret; ++} ++ ++static const char * ++grub_efi_net_var_get_mac (struct grub_env_var *var __attribute__ ((unused)), ++ const char *val __attribute__ ((unused))) ++{ ++ const char *intf = grub_env_get ("net_default_interface"); ++ const char *ret = NULL; ++ if (intf) ++ { ++ char *buf = grub_xasprintf ("net_%s_mac", intf); ++ if (buf) ++ ret = grub_env_get (buf); ++ grub_free (buf); ++ } ++ return ret; ++} ++ ++static void ++grub_efi_net_export_interface_vars (void) ++{ ++ struct grub_efi_net_device *dev; ++ ++ for (dev = net_devices; dev; dev = dev->next) ++ { ++ grub_efi_net_interface_t *inf; ++ ++ for (inf = dev->net_interfaces; inf; inf = inf->next) ++ { ++ char *var; ++ ++ var = grub_xasprintf ("net_%s_ip", inf->name); ++ grub_register_variable_hook (var, grub_efi_net_var_get_address, 0); ++ grub_env_export (var); ++ grub_free (var); ++ var = grub_xasprintf ("net_%s_mac", inf->name); ++ grub_register_variable_hook (var, grub_efi_net_var_get_address, 0); ++ grub_env_export (var); ++ grub_free (var); ++ } ++ } ++} ++ ++static void ++grub_efi_net_unset_interface_vars (void) ++{ ++ struct grub_efi_net_device *dev; ++ ++ for (dev = net_devices; dev; dev = dev->next) ++ { ++ grub_efi_net_interface_t *inf; ++ ++ for (inf = dev->net_interfaces; inf; inf = inf->next) ++ { ++ char *var; ++ ++ var = grub_xasprintf ("net_%s_ip", inf->name); ++ grub_register_variable_hook (var, 0, 0); ++ grub_env_unset (var); ++ grub_free (var); ++ var = grub_xasprintf ("net_%s_mac", inf->name); ++ grub_register_variable_hook (var, 0, 0); ++ grub_env_unset (var); ++ grub_free (var); ++ } ++ } ++} ++ ++grub_efi_net_interface_t * ++grub_efi_net_create_interface (struct grub_efi_net_device *dev, ++ const char *interface_name, ++ grub_efi_net_ip_manual_address_t *net_ip, ++ int has_subnet) ++{ ++ grub_efi_net_interface_t *inf; ++ ++ for (inf = dev->net_interfaces; inf; inf = inf->next) ++ { ++ if (inf->prefer_ip6 == net_ip->is_ip6) ++ break; ++ } ++ ++ if (!inf) ++ { ++ inf = grub_malloc (sizeof(*inf)); ++ inf->name = grub_strdup (interface_name); ++ inf->prefer_ip6 = net_ip->is_ip6; ++ inf->dev = dev; ++ inf->next = dev->net_interfaces; ++ inf->ip_config = (net_ip->is_ip6) ? efi_net_ip6_config : efi_net_ip4_config ; ++ dev->net_interfaces = inf; ++ } ++ else ++ { ++ grub_free (inf->name); ++ inf->name = grub_strdup (interface_name); ++ } ++ ++ if (!efi_net_interface_set_address (inf, net_ip, has_subnet)) ++ { ++ grub_error (GRUB_ERR_BUG, N_("Set Address Failed")); ++ return NULL; ++ } ++ ++ return inf; ++} ++ ++static void ++grub_efi_net_config_real (grub_efi_handle_t hnd, char **device, ++ char **path) ++{ ++ grub_efi_handle_t config_hnd; ++ ++ struct grub_efi_net_device *netdev; ++ grub_efi_net_interface_t *inf; ++ ++ config_hnd = grub_efi_locate_device_path (&ip4_config_guid, grub_efi_get_device_path (hnd), NULL); ++ ++ if (!config_hnd) ++ return; ++ ++ for (netdev = net_devices; netdev; netdev = netdev->next) ++ if (netdev->handle == config_hnd) ++ break; ++ ++ if (!netdev) ++ return; ++ ++ if (!(inf = grub_efi_net_config_from_handle (hnd, netdev, device, path))) ++ return; ++ ++ grub_env_set ("net_default_interface", inf->name); ++ grub_efi_net_export_interface_vars (); ++} ++ ++static grub_err_t ++grub_efi_netfs_dir (grub_device_t device, const char *path __attribute__ ((unused)), ++ grub_fs_dir_hook_t hook __attribute__ ((unused)), ++ void *hook_data __attribute__ ((unused))) ++{ ++ if (!device->net) ++ return grub_error (GRUB_ERR_BUG, "invalid net device"); ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++grub_efi_netfs_open (struct grub_file *file_out __attribute__ ((unused)), ++ const char *name __attribute__ ((unused))) ++{ ++ struct grub_file *file, *bufio; ++ ++ file = grub_malloc (sizeof (*file)); ++ if (!file) ++ return grub_errno; ++ ++ grub_memcpy (file, file_out, sizeof (struct grub_file)); ++ file->device->net->name = grub_strdup (name); ++ ++ if (!file->device->net->name) ++ { ++ grub_free (file); ++ return grub_errno; ++ } ++ ++ efi_net_interface(open, file, name); ++ grub_print_error (); ++ ++ bufio = grub_bufio_open (file, 32768); ++ if (!bufio) ++ { ++ grub_free (file->device->net->name); ++ grub_free (file); ++ return grub_errno; ++ } ++ grub_memcpy (file_out, bufio, sizeof (struct grub_file)); ++ grub_free (bufio); ++ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_ssize_t ++grub_efihttp_chunk_read (grub_file_t file, char *buf, ++ grub_size_t len, grub_size_t chunk_size) ++{ ++ char *chunk = grub_malloc (chunk_size); ++ grub_size_t sum = 0; ++ ++ while (len) ++ { ++ grub_ssize_t rd; ++ grub_size_t sz = (len > chunk_size) ? chunk_size : len; ++ ++ rd = efi_net_interface (read, file, chunk, sz); ++ ++ if (rd <= 0) ++ return rd; ++ ++ if (buf) ++ { ++ grub_memcpy (buf, chunk, rd); ++ buf += rd; ++ } ++ sum += rd; ++ len -= rd; ++ } ++ ++ grub_free (chunk); ++ return sum; ++} ++ ++static grub_ssize_t ++grub_efi_netfs_read (grub_file_t file __attribute__ ((unused)), ++ char *buf __attribute__ ((unused)), grub_size_t len __attribute__ ((unused))) ++{ ++ if (file->offset > file->device->net->offset) ++ { ++ grub_efihttp_chunk_read (file, NULL, file->offset - file->device->net->offset, 10240); ++ } ++ else if (file->offset < file->device->net->offset) ++ { ++ efi_net_interface (close, file); ++ efi_net_interface (open, file, file->device->net->name); ++ if (file->offset) ++ grub_efihttp_chunk_read (file, NULL, file->offset, 10240); ++ } ++ ++ return efi_net_interface (read, file, buf, len); ++} ++ ++static grub_err_t ++grub_efi_netfs_close (grub_file_t file) ++{ ++ efi_net_interface (close, file); ++ return GRUB_ERR_NONE; ++} ++ ++static grub_efi_handle_t ++grub_efi_service_binding (grub_efi_handle_t dev, grub_efi_guid_t *service_binding_guid) ++{ ++ grub_efi_service_binding_t *service; ++ grub_efi_status_t status; ++ grub_efi_handle_t child_dev = NULL; ++ ++ service = grub_efi_open_protocol (dev, service_binding_guid, GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ if (!service) ++ { ++ grub_error (GRUB_ERR_IO, N_("couldn't open efi service binding protocol")); ++ return NULL; ++ } ++ ++ status = efi_call_2 (service->create_child, service, &child_dev); ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_error (GRUB_ERR_IO, N_("Failed to create child device of http service %x"), status); ++ return NULL; ++ } ++ ++ return child_dev; ++} ++ ++static grub_err_t ++grub_efi_net_parse_address (const char *address, ++ grub_efi_ip4_config2_manual_address_t *ip4, ++ grub_efi_ip6_config_manual_address_t *ip6, ++ int *is_ip6, ++ int *has_cidr) ++{ ++ const char *rest; ++ ++ if (grub_efi_string_to_ip4_address (address, &ip4->address, &rest)) ++ { ++ *is_ip6 = 0; ++ if (*rest == '/') ++ { ++ grub_uint32_t subnet_mask_size; ++ ++ subnet_mask_size = grub_strtoul (rest + 1, (char **) &rest, 0); ++ ++ if (!grub_errno && subnet_mask_size <= 32 && *rest == 0) ++ { ++ grub_uint32_t subnet_mask; ++ ++ subnet_mask = grub_cpu_to_be32 ((0xffffffffU << (32 - subnet_mask_size))); ++ grub_memcpy (ip4->subnet_mask, &subnet_mask, sizeof (ip4->subnet_mask)); ++ if (has_cidr) ++ *has_cidr = 1; ++ return GRUB_ERR_NONE; ++ } ++ } ++ else if (*rest == 0) ++ { ++ grub_uint32_t subnet_mask = 0xffffffffU; ++ grub_memcpy (ip4->subnet_mask, &subnet_mask, sizeof (ip4->subnet_mask)); ++ if (has_cidr) ++ *has_cidr = 0; ++ return GRUB_ERR_NONE; ++ } ++ } ++ else if (grub_efi_string_to_ip6_address (address, &ip6->address, &rest)) ++ { ++ *is_ip6 = 1; ++ if (*rest == '/') ++ { ++ grub_efi_uint8_t prefix_length; ++ ++ prefix_length = grub_strtoul (rest + 1, (char **) &rest, 0); ++ if (!grub_errno && prefix_length <= 128 && *rest == 0) ++ { ++ ip6->prefix_length = prefix_length; ++ ip6->is_anycast = 0; ++ if (has_cidr) ++ *has_cidr = 1; ++ return GRUB_ERR_NONE; ++ } ++ } ++ else if (*rest == 0) ++ { ++ ip6->prefix_length = 128; ++ ip6->is_anycast = 0; ++ if (has_cidr) ++ *has_cidr = 0; ++ return GRUB_ERR_NONE; ++ } ++ } ++ ++ return grub_error (GRUB_ERR_NET_BAD_ADDRESS, ++ N_("unrecognised network address `%s'"), ++ address); ++} ++ ++static grub_efi_net_interface_t * ++match_route (const char *server) ++{ ++ grub_err_t err; ++ grub_efi_ip4_config2_manual_address_t ip4; ++ grub_efi_ip6_config_manual_address_t ip6; ++ grub_efi_net_interface_t *inf; ++ int is_ip6 = 0; ++ ++ grub_error_push (); ++ err = grub_efi_net_parse_address (server, &ip4, &ip6, &is_ip6, 0); ++ ++ if (err) ++ { ++ grub_dprintf ("efinetfs", "error in matching route : %s\n", grub_errmsg); ++ grub_error_pop (); ++ return NULL; ++ } ++ grub_error_pop (); ++ ++ if (is_ip6) ++ { ++ struct grub_efi_net_device *dev; ++ grub_efi_net_ip_address_t addr; ++ ++ grub_memcpy (addr.ip6, ip6.address, sizeof(ip6.address)); ++ ++ for (dev = net_devices; dev; dev = dev->next) ++ if ((inf = efi_net_ip6_config->best_interface (dev, &addr))) ++ return inf; ++ } ++ else ++ { ++ struct grub_efi_net_device *dev; ++ grub_efi_net_ip_address_t addr; ++ ++ grub_memcpy (addr.ip4, ip4.address, sizeof(ip4.address)); ++ ++ for (dev = net_devices; dev; dev = dev->next) ++ if ((inf = efi_net_ip4_config->best_interface (dev, &addr))) ++ return inf; ++ } ++ ++ return 0; ++} ++ ++static void ++grub_efi_net_add_pxebc_to_cards (void) ++{ ++ grub_efi_uintn_t num_handles; ++ grub_efi_handle_t *handles; ++ grub_efi_handle_t *handle; ++ ++ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &pxe_io_guid, ++ 0, &num_handles); ++ if (!handles) ++ return; ++ ++ for (handle = handles; num_handles--; handle++) ++ { ++ grub_efi_device_path_t *dp, *ddp, *ldp; ++ grub_efi_pxe_t *pxe; ++ struct grub_efi_net_device *d; ++ int is_ip6 = 0; ++ ++ dp = grub_efi_get_device_path (*handle); ++ if (!dp) ++ continue; ++ ++ ddp = grub_efi_duplicate_device_path (dp); ++ ldp = grub_efi_find_last_device_path (ddp); ++ ++ if (ldp->type == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE ++ && ldp->subtype == GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE) ++ { ++ ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ++ ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ++ ldp->length = sizeof (*ldp); ++ } ++ else if (ldp->type == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE ++ && ldp->subtype == GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE) ++ { ++ is_ip6 = 1; ++ ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ++ ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ++ ldp->length = sizeof (*ldp); ++ } ++ ++ for (d = net_devices; d; d = d->next) ++ if (grub_efi_compare_device_paths (ddp, grub_efi_get_device_path (d->handle)) == 0) ++ break; ++ ++ if (!d) ++ { ++ grub_free (ddp); ++ continue; ++ } ++ ++ pxe = grub_efi_open_protocol (*handle, &pxe_io_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ ++ if (!pxe) ++ { ++ grub_free (ddp); ++ continue; ++ } ++ ++ if (is_ip6) ++ { ++ d->ip6_pxe_handle = *handle; ++ d->ip6_pxe = pxe; ++ } ++ else ++ { ++ d->ip4_pxe_handle = *handle; ++ d->ip4_pxe = pxe; ++ } ++ ++ grub_free (ddp); ++ } ++ ++ grub_free (handles); ++} ++ ++static void ++set_ip_policy_to_static (void) ++{ ++ struct grub_efi_net_device *dev; ++ ++ for (dev = net_devices; dev; dev = dev->next) ++ { ++ grub_efi_ip4_config2_policy_t ip4_policy = GRUB_EFI_IP4_CONFIG2_POLICY_STATIC; ++ ++ if (efi_call_4 (dev->ip4_config->set_data, dev->ip4_config, ++ GRUB_EFI_IP4_CONFIG2_DATA_TYPE_POLICY, ++ sizeof (ip4_policy), &ip4_policy) != GRUB_EFI_SUCCESS) ++ grub_dprintf ("efinetfs", "could not set GRUB_EFI_IP4_CONFIG2_POLICY_STATIC on dev `%s'", dev->card_name); ++ ++ if (dev->ip6_config) ++ { ++ grub_efi_ip6_config_policy_t ip6_policy = GRUB_EFI_IP6_CONFIG_POLICY_MANUAL; ++ ++ if (efi_call_4 (dev->ip6_config->set_data, dev->ip6_config, ++ GRUB_EFI_IP6_CONFIG_DATA_TYPE_POLICY, ++ sizeof (ip6_policy), &ip6_policy) != GRUB_EFI_SUCCESS) ++ grub_dprintf ("efinetfs", "could not set GRUB_EFI_IP6_CONFIG_POLICY_MANUAL on dev `%s'", dev->card_name); ++ } ++ } ++} ++ ++/* FIXME: Do not fail if the card did not support any of the protocol (Eg http) */ ++static void ++grub_efi_net_find_cards (void) ++{ ++ grub_efi_uintn_t num_handles; ++ grub_efi_handle_t *handles; ++ grub_efi_handle_t *handle; ++ int id; ++ ++ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &ip4_config_guid, ++ 0, &num_handles); ++ if (!handles) ++ return; ++ ++ for (id = 0, handle = handles; num_handles--; handle++, id++) ++ { ++ grub_efi_device_path_t *dp; ++ grub_efi_ip4_config2_protocol_t *ip4_config; ++ grub_efi_ip6_config_protocol_t *ip6_config; ++ grub_efi_handle_t http_handle; ++ grub_efi_http_t *http; ++ grub_efi_handle_t dhcp4_handle; ++ grub_efi_dhcp4_protocol_t *dhcp4; ++ grub_efi_handle_t dhcp6_handle; ++ grub_efi_dhcp6_protocol_t *dhcp6; ++ ++ struct grub_efi_net_device *d; ++ ++ dp = grub_efi_get_device_path (*handle); ++ if (!dp) ++ continue; ++ ++ ip4_config = grub_efi_open_protocol (*handle, &ip4_config_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ if (!ip4_config) ++ continue; ++ ++ ip6_config = grub_efi_open_protocol (*handle, &ip6_config_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ ++ http_handle = grub_efi_service_binding (*handle, &http_service_binding_guid); ++ grub_errno = GRUB_ERR_NONE; ++ http = (http_handle) ++ ? grub_efi_open_protocol (http_handle, &http_guid, GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL) ++ : NULL; ++ ++ dhcp4_handle = grub_efi_service_binding (*handle, &dhcp4_service_binding_guid); ++ grub_errno = GRUB_ERR_NONE; ++ dhcp4 = (dhcp4_handle) ++ ? grub_efi_open_protocol (dhcp4_handle, &dhcp4_guid, GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL) ++ : NULL; ++ ++ ++ dhcp6_handle = grub_efi_service_binding (*handle, &dhcp6_service_binding_guid); ++ grub_errno = GRUB_ERR_NONE; ++ dhcp6 = (dhcp6_handle) ++ ? grub_efi_open_protocol (dhcp6_handle, &dhcp6_guid, GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL) ++ : NULL; ++ ++ d = grub_malloc (sizeof (*d)); ++ if (!d) ++ { ++ grub_free (handles); ++ while (net_devices) ++ { ++ d = net_devices->next; ++ grub_free (net_devices); ++ net_devices = d; ++ } ++ return; ++ } ++ d->handle = *handle; ++ d->ip4_config = ip4_config; ++ d->ip6_config = ip6_config; ++ d->http_handle = http_handle; ++ d->http = http; ++ d->dhcp4_handle = dhcp4_handle; ++ d->dhcp4 = dhcp4; ++ d->dhcp6_handle = dhcp6_handle; ++ d->dhcp6 = dhcp6; ++ d->next = net_devices; ++ d->card_name = grub_xasprintf ("efinet%d", id); ++ d->net_interfaces = NULL; ++ net_devices = d; ++ } ++ ++ grub_efi_net_add_pxebc_to_cards (); ++ grub_free (handles); ++ set_ip_policy_to_static (); ++} ++ ++static void ++listroutes_ip4 (struct grub_efi_net_device *netdev) ++{ ++ char **routes; ++ ++ routes = NULL; ++ ++ if ((routes = efi_net_ip4_config->get_route_table (netdev))) ++ { ++ char **r; ++ ++ for (r = routes; *r; ++r) ++ grub_printf ("%s\n", *r); ++ } ++ ++ if (routes) ++ { ++ char **r; ++ ++ for (r = routes; *r; ++r) ++ grub_free (*r); ++ grub_free (routes); ++ } ++} ++ ++static void ++listroutes_ip6 (struct grub_efi_net_device *netdev) ++{ ++ char **routes; ++ ++ routes = NULL; ++ ++ if ((routes = efi_net_ip6_config->get_route_table (netdev))) ++ { ++ char **r; ++ ++ for (r = routes; *r; ++r) ++ grub_printf ("%s\n", *r); ++ } ++ ++ if (routes) ++ { ++ char **r; ++ ++ for (r = routes; *r; ++r) ++ grub_free (*r); ++ grub_free (routes); ++ } ++} ++ ++static grub_err_t ++grub_cmd_efi_listroutes (struct grub_command *cmd __attribute__ ((unused)), ++ int argc __attribute__ ((unused)), ++ char **args __attribute__ ((unused))) ++{ ++ struct grub_efi_net_device *netdev; ++ ++ for (netdev = net_devices; netdev; netdev = netdev->next) ++ { ++ listroutes_ip4 (netdev); ++ listroutes_ip6 (netdev); ++ } ++ ++ return GRUB_ERR_NONE; ++} ++static grub_err_t ++grub_cmd_efi_listcards (struct grub_command *cmd __attribute__ ((unused)), ++ int argc __attribute__ ((unused)), ++ char **args __attribute__ ((unused))) ++{ ++ struct grub_efi_net_device *dev; ++ ++ for (dev = net_devices; dev; dev = dev->next) ++ { ++ char *hw_addr; ++ ++ hw_addr = efi_net_ip4_config->get_hw_address (dev); ++ ++ if (hw_addr) ++ { ++ grub_printf ("%s %s\n", dev->card_name, hw_addr); ++ grub_free (hw_addr); ++ } ++ } ++ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++grub_cmd_efi_listaddrs (struct grub_command *cmd __attribute__ ((unused)), ++ int argc __attribute__ ((unused)), ++ char **args __attribute__ ((unused))) ++{ ++ struct grub_efi_net_device *dev; ++ grub_efi_net_interface_t *inf; ++ ++ for (dev = net_devices; dev; dev = dev->next) ++ for (inf = dev->net_interfaces; inf; inf = inf->next) ++ { ++ char *hw_addr = NULL; ++ char *addr = NULL; ++ ++ if ((hw_addr = efi_net_interface_get_hw_address (inf)) ++ && (addr = efi_net_interface_get_address (inf))) ++ grub_printf ("%s %s %s\n", inf->name, hw_addr, addr); ++ ++ if (hw_addr) ++ grub_free (hw_addr); ++ if (addr) ++ grub_free (addr); ++ } ++ ++ return GRUB_ERR_NONE; ++} ++ ++/* FIXME: support MAC specifying. */ ++static grub_err_t ++grub_cmd_efi_addaddr (struct grub_command *cmd __attribute__ ((unused)), ++ int argc, char **args) ++{ ++ struct grub_efi_net_device *dev; ++ grub_err_t err; ++ grub_efi_ip4_config2_manual_address_t ip4; ++ grub_efi_ip6_config_manual_address_t ip6; ++ grub_efi_net_ip_manual_address_t net_ip; ++ int is_ip6 = 0; ++ int cidr = 0; ++ ++ if (argc != 3) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("three arguments expected")); ++ ++ for (dev = net_devices; dev; dev = dev->next) ++ { ++ if (grub_strcmp (dev->card_name, args[1]) == 0) ++ break; ++ } ++ ++ if (!dev) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("card not found")); ++ ++ err = grub_efi_net_parse_address (args[2], &ip4, &ip6, &is_ip6, &cidr); ++ ++ if (err) ++ return err; ++ ++ net_ip.is_ip6 = is_ip6; ++ if (is_ip6) ++ grub_memcpy (&net_ip.ip6, &ip6, sizeof(net_ip.ip6)); ++ else ++ grub_memcpy (&net_ip.ip4, &ip4, sizeof(net_ip.ip4)); ++ ++ if (!grub_efi_net_create_interface (dev, ++ args[0], ++ &net_ip, ++ cidr)) ++ return grub_errno; ++ ++ return GRUB_ERR_NONE; ++} ++ ++static struct grub_fs grub_efi_netfs; ++ ++static grub_net_t ++grub_net_open_real (const char *name __attribute__ ((unused))) ++{ ++ grub_size_t protnamelen; ++ const char *protname, *server; ++ grub_net_t ret; ++ ++ net_interface = NULL; ++ ++ if (grub_strncmp (name, "pxe:", sizeof ("pxe:") - 1) == 0) ++ { ++ protname = "tftp"; ++ protnamelen = sizeof ("tftp") - 1; ++ server = name + sizeof ("pxe:") - 1; ++ } ++ else if (grub_strcmp (name, "pxe") == 0) ++ { ++ protname = "tftp"; ++ protnamelen = sizeof ("tftp") - 1; ++ server = default_server; ++ } ++ else ++ { ++ const char *comma; ++ ++ comma = grub_strchr (name, ','); ++ if (comma) ++ { ++ protnamelen = comma - name; ++ server = comma + 1; ++ protname = name; ++ } ++ else ++ { ++ protnamelen = grub_strlen (name); ++ server = default_server; ++ protname = name; ++ } ++ } ++ ++ if (!server) ++ { ++ grub_error (GRUB_ERR_NET_BAD_ADDRESS, ++ N_("no server is specified")); ++ return NULL; ++ } ++ ++ /*FIXME: Use DNS translate name to address */ ++ net_interface = match_route (server); ++ ++ /*XXX: should we check device with default gateway ? */ ++ if (!net_interface && !(net_interface = net_default_interface)) ++ { ++ grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("disk `%s' no route found"), ++ name); ++ return NULL; ++ } ++ ++ if ((protnamelen == (sizeof ("https") - 1) ++ && grub_memcmp ("https", protname, protnamelen) == 0)) ++ { ++ net_interface->io = &io_http; ++ net_interface->io_type = 1; ++ } ++ else if ((protnamelen == (sizeof ("http") - 1) ++ && grub_memcmp ("http", protname, protnamelen) == 0)) ++ { ++ net_interface->io = &io_http; ++ net_interface->io_type = 0; ++ } ++ else if (protnamelen == (sizeof ("tftp") - 1) ++ && grub_memcmp ("tftp", protname, protnamelen) == 0) ++ { ++ net_interface->io = &io_pxe; ++ net_interface->io_type = 0; ++ } ++ else ++ { ++ grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("disk `%s' not found"), ++ name); ++ return NULL; ++ } ++ ++ /*XXX: Should we try to avoid doing excess "reconfigure" here ??? */ ++ efi_net_interface (configure); ++ ++ ret = grub_zalloc (sizeof (*ret)); ++ if (!ret) ++ return NULL; ++ ++ ret->server = grub_strdup (server); ++ if (!ret->server) ++ { ++ grub_free (ret); ++ return NULL; ++ } ++ ++ ret->fs = &grub_efi_netfs; ++ return ret; ++} ++#if 0 ++static grub_command_t cmd_efi_lsaddr; ++static grub_command_t cmd_efi_lscards; ++static grub_command_t cmd_efi_lsroutes; ++static grub_command_t cmd_efi_addaddr; ++#endif ++ ++static struct grub_fs grub_efi_netfs = ++ { ++ .name = "efi netfs", ++ .fs_dir = grub_efi_netfs_dir, ++ .fs_open = grub_efi_netfs_open, ++ .fs_read = grub_efi_netfs_read, ++ .fs_close = grub_efi_netfs_close, ++ .fs_label = NULL, ++ .fs_uuid = NULL, ++ .fs_mtime = NULL, ++ }; ++ ++int ++grub_efi_net_boot_from_https (void) ++{ ++ grub_efi_loaded_image_t *image = NULL; ++ grub_efi_device_path_t *dp; ++ ++ image = grub_efi_get_loaded_image (grub_efi_image_handle); ++ if (!image) ++ return 0; ++ ++ dp = grub_efi_get_device_path (image->device_handle); ++ ++ while (1) ++ { ++ grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp); ++ grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp); ++ grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (dp); ++ ++ if ((type == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE) ++ && (subtype == GRUB_EFI_URI_DEVICE_PATH_SUBTYPE)) ++ { ++ grub_efi_uri_device_path_t *uri_dp = (grub_efi_uri_device_path_t *) dp; ++ return (grub_strncmp ((const char*)uri_dp->uri, "https://", sizeof ("https://") - 1) == 0) ? 1 : 0; ++ } ++ ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) ++ break; ++ dp = (grub_efi_device_path_t *) ((char *) dp + len); ++ } ++ ++ return 0; ++} ++ ++int ++grub_efi_net_boot_from_opa (void) ++{ ++ grub_efi_loaded_image_t *image = NULL; ++ grub_efi_device_path_t *dp; ++ ++ image = grub_efi_get_loaded_image (grub_efi_image_handle); ++ if (!image) ++ return 0; ++ ++ dp = grub_efi_get_device_path (image->device_handle); ++ ++ while (1) ++ { ++ grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp); ++ grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp); ++ grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (dp); ++ ++ if ((type == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE) ++ && (subtype == GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE)) ++ { ++ grub_efi_mac_address_device_path_t *mac_dp = (grub_efi_mac_address_device_path_t *)dp; ++ return (mac_dp->if_type == 0xC7) ? 1 : 0; ++ } ++ ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) ++ break; ++ dp = (grub_efi_device_path_t *) ((char *) dp + len); ++ } ++ ++ return 0; ++} ++ ++static char * ++grub_env_write_readonly (struct grub_env_var *var __attribute__ ((unused)), ++ const char *val __attribute__ ((unused))) ++{ ++ return NULL; ++} ++ ++grub_command_func_t grub_efi_net_list_routes = grub_cmd_efi_listroutes; ++grub_command_func_t grub_efi_net_list_cards = grub_cmd_efi_listcards; ++grub_command_func_t grub_efi_net_list_addrs = grub_cmd_efi_listaddrs; ++grub_command_func_t grub_efi_net_add_addr = grub_cmd_efi_addaddr; ++ ++int ++grub_efi_net_fs_init () ++{ ++ grub_efi_net_find_cards (); ++ grub_efi_net_config = grub_efi_net_config_real; ++ grub_net_open = grub_net_open_real; ++ grub_register_variable_hook ("net_default_server", grub_efi_net_var_get_server, ++ grub_efi_net_var_set_server); ++ grub_env_export ("net_default_server"); ++ grub_register_variable_hook ("pxe_default_server", grub_efi_net_var_get_server, ++ grub_efi_net_var_set_server); ++ grub_env_export ("pxe_default_server"); ++ grub_register_variable_hook ("net_default_interface", 0, ++ grub_efi_net_var_set_interface); ++ grub_env_export ("net_default_interface"); ++ grub_register_variable_hook ("net_default_ip", grub_efi_net_var_get_ip, ++ 0); ++ grub_env_export ("net_default_ip"); ++ grub_register_variable_hook ("net_default_mac", grub_efi_net_var_get_mac, ++ 0); ++ grub_env_export ("net_default_mac"); ++ ++ grub_env_set ("grub_netfs_type", "efi"); ++ grub_register_variable_hook ("grub_netfs_type", 0, grub_env_write_readonly); ++ grub_env_export ("grub_netfs_type"); ++ ++ return 1; ++} ++ ++void ++grub_efi_net_fs_fini (void) ++{ ++ grub_env_unset ("grub_netfs_type"); ++ grub_efi_net_unset_interface_vars (); ++ grub_register_variable_hook ("net_default_server", 0, 0); ++ grub_env_unset ("net_default_server"); ++ grub_register_variable_hook ("net_default_interface", 0, 0); ++ grub_env_unset ("net_default_interface"); ++ grub_register_variable_hook ("pxe_default_server", 0, 0); ++ grub_env_unset ("pxe_default_server"); ++ grub_register_variable_hook ("net_default_ip", 0, 0); ++ grub_env_unset ("net_default_ip"); ++ grub_register_variable_hook ("net_default_mac", 0, 0); ++ grub_env_unset ("net_default_mac"); ++ grub_efi_net_config = NULL; ++ grub_net_open = NULL; ++ grub_fs_unregister (&grub_efi_netfs); ++} +diff --git a/grub-core/net/efi/pxe.c b/grub-core/net/efi/pxe.c +new file mode 100644 +index 0000000000..4b6b48cb12 +--- /dev/null ++++ b/grub-core/net/efi/pxe.c +@@ -0,0 +1,424 @@ ++ ++#include ++#include ++#include ++#include ++#include ++ ++static grub_efi_ip6_config_manual_address_t * ++efi_ip6_config_manual_address (grub_efi_ip6_config_protocol_t *ip6_config) ++{ ++ grub_efi_uintn_t sz; ++ grub_efi_status_t status; ++ grub_efi_ip6_config_manual_address_t *manual_address; ++ ++ sz = sizeof (*manual_address); ++ manual_address = grub_malloc (sz); ++ if (!manual_address) ++ return NULL; ++ ++ status = efi_call_4 (ip6_config->get_data, ip6_config, ++ GRUB_EFI_IP6_CONFIG_DATA_TYPE_MANUAL_ADDRESS, ++ &sz, manual_address); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_free (manual_address); ++ return NULL; ++ } ++ ++ return manual_address; ++} ++ ++static grub_efi_ip4_config2_manual_address_t * ++efi_ip4_config_manual_address (grub_efi_ip4_config2_protocol_t *ip4_config) ++{ ++ grub_efi_uintn_t sz; ++ grub_efi_status_t status; ++ grub_efi_ip4_config2_manual_address_t *manual_address; ++ ++ sz = sizeof (*manual_address); ++ manual_address = grub_malloc (sz); ++ if (!manual_address) ++ return NULL; ++ ++ status = efi_call_4 (ip4_config->get_data, ip4_config, ++ GRUB_EFI_IP4_CONFIG2_DATA_TYPE_MANUAL_ADDRESS, ++ &sz, manual_address); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ grub_free (manual_address); ++ return NULL; ++ } ++ ++ return manual_address; ++} ++ ++static void ++pxe_configure (struct grub_efi_net_device *dev, int prefer_ip6) ++{ ++ grub_efi_pxe_t *pxe = (prefer_ip6) ? dev->ip6_pxe : dev->ip4_pxe; ++ ++ grub_efi_pxe_mode_t *mode = pxe->mode; ++ ++ if (!mode->started) ++ { ++ grub_efi_status_t status; ++ status = efi_call_2 (pxe->start, pxe, prefer_ip6); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ grub_printf ("Couldn't start PXE\n"); ++ } ++ ++#if 0 ++ grub_printf ("PXE STARTED: %u\n", mode->started); ++ grub_printf ("PXE USING IPV6: %u\n", mode->using_ipv6); ++#endif ++ ++ if (mode->using_ipv6) ++ { ++ grub_efi_ip6_config_manual_address_t *manual_address; ++ manual_address = efi_ip6_config_manual_address (dev->ip6_config); ++ ++ if (manual_address && ++ grub_memcmp (manual_address->address, mode->station_ip.v6.addr, sizeof (manual_address->address)) != 0) ++ { ++ grub_efi_status_t status; ++ grub_efi_pxe_ip_address_t station_ip; ++ ++ grub_memcpy (station_ip.v6.addr, manual_address->address, sizeof (station_ip.v6.addr)); ++ status = efi_call_3 (pxe->set_station_ip, pxe, &station_ip, NULL); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ grub_printf ("Couldn't set station ip\n"); ++ ++ grub_free (manual_address); ++ } ++ } ++ else ++ { ++ grub_efi_ip4_config2_manual_address_t *manual_address; ++ manual_address = efi_ip4_config_manual_address (dev->ip4_config); ++ ++ if (manual_address && ++ grub_memcmp (manual_address->address, mode->station_ip.v4.addr, sizeof (manual_address->address)) != 0) ++ { ++ grub_efi_status_t status; ++ grub_efi_pxe_ip_address_t station_ip; ++ grub_efi_pxe_ip_address_t subnet_mask; ++ ++ grub_memcpy (station_ip.v4.addr, manual_address->address, sizeof (station_ip.v4.addr)); ++ grub_memcpy (subnet_mask.v4.addr, manual_address->subnet_mask, sizeof (subnet_mask.v4.addr)); ++ ++ status = efi_call_3 (pxe->set_station_ip, pxe, &station_ip, &subnet_mask); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ grub_printf ("Couldn't set station ip\n"); ++ ++ grub_free (manual_address); ++ } ++ } ++ ++#if 0 ++ if (mode->using_ipv6) ++ { ++ grub_printf ("PXE STATION IP: %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\n", ++ mode->station_ip.v6.addr[0], ++ mode->station_ip.v6.addr[1], ++ mode->station_ip.v6.addr[2], ++ mode->station_ip.v6.addr[3], ++ mode->station_ip.v6.addr[4], ++ mode->station_ip.v6.addr[5], ++ mode->station_ip.v6.addr[6], ++ mode->station_ip.v6.addr[7], ++ mode->station_ip.v6.addr[8], ++ mode->station_ip.v6.addr[9], ++ mode->station_ip.v6.addr[10], ++ mode->station_ip.v6.addr[11], ++ mode->station_ip.v6.addr[12], ++ mode->station_ip.v6.addr[13], ++ mode->station_ip.v6.addr[14], ++ mode->station_ip.v6.addr[15]); ++ } ++ else ++ { ++ grub_printf ("PXE STATION IP: %d.%d.%d.%d\n", ++ mode->station_ip.v4.addr[0], ++ mode->station_ip.v4.addr[1], ++ mode->station_ip.v4.addr[2], ++ mode->station_ip.v4.addr[3]); ++ grub_printf ("PXE SUBNET MASK: %d.%d.%d.%d\n", ++ mode->subnet_mask.v4.addr[0], ++ mode->subnet_mask.v4.addr[1], ++ mode->subnet_mask.v4.addr[2], ++ mode->subnet_mask.v4.addr[3]); ++ } ++#endif ++ ++ /* TODO: Set The Station IP to the IP2 Config */ ++} ++ ++static int ++parse_ip6 (const char *val, grub_uint64_t *ip, const char **rest) ++{ ++ grub_uint16_t newip[8]; ++ const char *ptr = val; ++ int word, quaddot = -1; ++ int bracketed = 0; ++ ++ if (ptr[0] == '[') { ++ bracketed = 1; ++ ptr++; ++ } ++ ++ if (ptr[0] == ':' && ptr[1] != ':') ++ return 0; ++ if (ptr[0] == ':') ++ ptr++; ++ ++ for (word = 0; word < 8; word++) ++ { ++ unsigned long t; ++ if (*ptr == ':') ++ { ++ quaddot = word; ++ word--; ++ ptr++; ++ continue; ++ } ++ t = grub_strtoul (ptr, (char **) &ptr, 16); ++ if (grub_errno) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ break; ++ } ++ if (t & ~0xffff) ++ return 0; ++ newip[word] = grub_cpu_to_be16 (t); ++ if (*ptr != ':') ++ break; ++ ptr++; ++ } ++ if (quaddot == -1 && word < 7) ++ return 0; ++ if (quaddot != -1) ++ { ++ grub_memmove (&newip[quaddot + 7 - word], &newip[quaddot], ++ (word - quaddot + 1) * sizeof (newip[0])); ++ grub_memset (&newip[quaddot], 0, (7 - word) * sizeof (newip[0])); ++ } ++ grub_memcpy (ip, newip, 16); ++ if (bracketed && *ptr == ']') { ++ ptr++; ++ } ++ if (rest) ++ *rest = ptr; ++ return 1; ++} ++ ++static grub_err_t ++pxe_open (struct grub_efi_net_device *dev, ++ int prefer_ip6, ++ grub_file_t file, ++ const char *filename, ++ int type __attribute__((unused))) ++{ ++ int i; ++ char *p; ++ grub_efi_status_t status; ++ grub_efi_pxe_ip_address_t server_ip; ++ grub_efi_uint64_t file_size = 0; ++ grub_efi_pxe_t *pxe = (prefer_ip6) ? dev->ip6_pxe : dev->ip4_pxe; ++ ++ if (pxe->mode->using_ipv6) ++ { ++ const char *rest; ++ grub_uint64_t ip6[2]; ++ if (parse_ip6 (file->device->net->server, ip6, &rest) && *rest == 0) ++ grub_memcpy (server_ip.v6.addr, ip6, sizeof (server_ip.v6.addr)); ++ /* TODO: ERROR Handling Here */ ++#if 0 ++ grub_printf ("PXE SERVER IP: %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\n", ++ server_ip.v6.addr[0], ++ server_ip.v6.addr[1], ++ server_ip.v6.addr[2], ++ server_ip.v6.addr[3], ++ server_ip.v6.addr[4], ++ server_ip.v6.addr[5], ++ server_ip.v6.addr[6], ++ server_ip.v6.addr[7], ++ server_ip.v6.addr[8], ++ server_ip.v6.addr[9], ++ server_ip.v6.addr[10], ++ server_ip.v6.addr[11], ++ server_ip.v6.addr[12], ++ server_ip.v6.addr[13], ++ server_ip.v6.addr[14], ++ server_ip.v6.addr[15]); ++#endif ++ } ++ else ++ { ++ for (i = 0, p = file->device->net->server; i < 4; ++i, ++p) ++ server_ip.v4.addr[i] = grub_strtoul (p, &p, 10); ++ } ++ ++ status = efi_call_10 (pxe->mtftp, ++ pxe, ++ GRUB_EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE, ++ NULL, ++ 0, ++ &file_size, ++ NULL, ++ &server_ip, ++ (grub_efi_char8_t *)filename, ++ NULL, ++ 0); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return grub_error (GRUB_ERR_IO, "Couldn't get file size"); ++ ++ file->size = (grub_off_t)file_size; ++ file->not_easily_seekable = 0; ++ file->data = 0; ++ file->device->net->offset = 0; ++ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++pxe_close (struct grub_efi_net_device *dev __attribute__((unused)), ++ int prefer_ip6 __attribute__((unused)), ++ grub_file_t file __attribute__((unused))) ++{ ++ file->offset = 0; ++ file->size = 0; ++ file->device->net->offset = 0; ++ ++ if (file->data) ++ { ++ grub_free (file->data); ++ file->data = NULL; ++ } ++ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_ssize_t ++pxe_read (struct grub_efi_net_device *dev, ++ int prefer_ip6, ++ grub_file_t file, ++ char *buf, ++ grub_size_t len) ++{ ++ int i; ++ char *p; ++ grub_efi_status_t status; ++ grub_efi_pxe_t *pxe = (prefer_ip6) ? dev->ip6_pxe : dev->ip4_pxe; ++ grub_efi_uint64_t bufsz = len; ++ grub_efi_pxe_ip_address_t server_ip; ++ char *buf2 = NULL; ++ ++ if (file->data) ++ { ++ /* TODO: RANGE Check for offset and file size */ ++ grub_memcpy (buf, (char*)file->data + file->device->net->offset, len); ++ file->device->net->offset += len; ++ return len; ++ } ++ ++ if (file->device->net->offset) ++ { ++ grub_error (GRUB_ERR_BUG, "No Offet Read Possible"); ++ grub_print_error (); ++ return 0; ++ } ++ ++ if (pxe->mode->using_ipv6) ++ { ++ const char *rest; ++ grub_uint64_t ip6[2]; ++ if (parse_ip6 (file->device->net->server, ip6, &rest) && *rest == 0) ++ grub_memcpy (server_ip.v6.addr, ip6, sizeof (server_ip.v6.addr)); ++ /* TODO: ERROR Handling Here */ ++ } ++ else ++ { ++ for (i = 0, p = file->device->net->server; i < 4; ++i, ++p) ++ server_ip.v4.addr[i] = grub_strtoul (p, &p, 10); ++ } ++ ++ status = efi_call_10 (pxe->mtftp, ++ pxe, ++ GRUB_EFI_PXE_BASE_CODE_TFTP_READ_FILE, ++ buf, ++ 0, ++ &bufsz, ++ NULL, ++ &server_ip, ++ (grub_efi_char8_t *)file->device->net->name, ++ NULL, ++ 0); ++ ++ if (bufsz != file->size) ++ { ++ grub_error (GRUB_ERR_BUG, "Short read should not happen here"); ++ grub_print_error (); ++ return 0; ++ } ++ ++ if (status == GRUB_EFI_BUFFER_TOO_SMALL) ++ { ++ ++ buf2 = grub_malloc (bufsz); ++ ++ if (!buf2) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, "ERROR OUT OF MEMORY"); ++ grub_print_error (); ++ return 0; ++ } ++ ++ status = efi_call_10 (pxe->mtftp, ++ pxe, ++ GRUB_EFI_PXE_BASE_CODE_TFTP_READ_FILE, ++ buf2, ++ 0, ++ &bufsz, ++ NULL, ++ &server_ip, ++ (grub_efi_char8_t *)file->device->net->name, ++ NULL, ++ 0); ++ } ++ ++ if (status != GRUB_EFI_SUCCESS) ++ { ++ if (buf2) ++ grub_free (buf2); ++ ++ grub_error (GRUB_ERR_IO, "Failed to Read File"); ++ grub_print_error (); ++ return 0; ++ } ++ ++ if (buf2) ++ grub_memcpy (buf, buf2, len); ++ ++ file->device->net->offset = len; ++ ++ if (buf2) ++ file->data = buf2; ++ ++ return len; ++} ++ ++struct grub_efi_net_io io_pxe = ++ { ++ .configure = pxe_configure, ++ .open = pxe_open, ++ .read = pxe_read, ++ .close = pxe_close ++ }; ++ +diff --git a/grub-core/net/net.c b/grub-core/net/net.c +index cdae1fe398..dfe29db4ca 100644 +--- a/grub-core/net/net.c ++++ b/grub-core/net/net.c +@@ -32,6 +32,9 @@ + #include + #include + #include ++#ifdef GRUB_MACHINE_EFI ++#include ++#endif + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -1828,8 +1831,49 @@ static grub_command_t cmd_addaddr, cmd_deladdr, cmd_addroute, cmd_delroute; + static grub_command_t cmd_lsroutes, cmd_lscards; + static grub_command_t cmd_lsaddr, cmd_slaac; + ++#ifdef GRUB_MACHINE_EFI ++ ++static enum { ++ INIT_MODE_NONE, ++ INIT_MODE_GRUB, ++ INIT_MODE_EFI ++} init_mode; ++ ++static grub_command_t cmd_bootp, cmd_bootp6; ++ ++#endif ++ + GRUB_MOD_INIT(net) + { ++#ifdef GRUB_MACHINE_EFI ++ if (grub_net_open) ++ return; ++ ++ if ((grub_efi_net_boot_from_https () || grub_efi_net_boot_from_opa ()) ++ && grub_efi_net_fs_init ()) ++ { ++ cmd_lsroutes = grub_register_command ("net_ls_routes", grub_efi_net_list_routes, ++ "", N_("list network routes")); ++ cmd_lscards = grub_register_command ("net_ls_cards", grub_efi_net_list_cards, ++ "", N_("list network cards")); ++ cmd_lsaddr = grub_register_command ("net_ls_addr", grub_efi_net_list_addrs, ++ "", N_("list network addresses")); ++ cmd_addaddr = grub_register_command ("net_add_addr", grub_efi_net_add_addr, ++ /* TRANSLATORS: HWADDRESS stands for ++ "hardware address". */ ++ N_("SHORTNAME CARD ADDRESS [HWADDRESS]"), ++ N_("Add a network address.")); ++ cmd_bootp = grub_register_command ("net_bootp", grub_efi_net_bootp, ++ N_("[CARD]"), ++ N_("perform a bootp autoconfiguration")); ++ cmd_bootp6 = grub_register_command ("net_bootp6", grub_efi_net_bootp6, ++ N_("[CARD]"), ++ N_("perform a bootp autoconfiguration")); ++ init_mode = INIT_MODE_EFI; ++ return; ++ } ++#endif ++ + grub_register_variable_hook ("net_default_server", defserver_get_env, + defserver_set_env); + grub_env_export ("net_default_server"); +@@ -1877,10 +1921,37 @@ GRUB_MOD_INIT(net) + grub_net_restore_hw, + GRUB_LOADER_PREBOOT_HOOK_PRIO_DISK); + grub_net_poll_cards_idle = grub_net_poll_cards_idle_real; ++ ++#ifdef GRUB_MACHINE_EFI ++ grub_env_set ("grub_netfs_type", "grub"); ++ grub_register_variable_hook ("grub_netfs_type", 0, grub_env_write_readonly); ++ grub_env_export ("grub_netfs_type"); ++ init_mode = INIT_MODE_GRUB; ++#endif ++ + } + + GRUB_MOD_FINI(net) + { ++ ++#ifdef GRUB_MACHINE_EFI ++ if (init_mode == INIT_MODE_NONE) ++ return; ++ ++ if (init_mode == INIT_MODE_EFI) ++ { ++ grub_unregister_command (cmd_lsroutes); ++ grub_unregister_command (cmd_lscards); ++ grub_unregister_command (cmd_lsaddr); ++ grub_unregister_command (cmd_addaddr); ++ grub_unregister_command (cmd_bootp); ++ grub_unregister_command (cmd_bootp6); ++ grub_efi_net_fs_fini (); ++ init_mode = INIT_MODE_NONE; ++ return; ++ } ++#endif ++ + grub_register_variable_hook ("net_default_server", 0, 0); + grub_register_variable_hook ("pxe_default_server", 0, 0); + +@@ -1899,4 +1970,7 @@ GRUB_MOD_FINI(net) + grub_net_fini_hw (0); + grub_loader_unregister_preboot_hook (fini_hnd); + grub_net_poll_cards_idle = grub_net_poll_cards_idle_real; ++#ifdef GRUB_MACHINE_EFI ++ init_mode = INIT_MODE_NONE; ++#endif + } +diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h +index 08bff60b51..49275e4117 100644 +--- a/include/grub/efi/api.h ++++ b/include/grub/efi/api.h +@@ -593,6 +593,23 @@ typedef grub_uint16_t grub_efi_ipv6_address_t[8]; + typedef grub_uint8_t grub_efi_ip_address_t[8] __attribute__ ((aligned(4))); + typedef grub_efi_uint64_t grub_efi_physical_address_t; + typedef grub_efi_uint64_t grub_efi_virtual_address_t; ++typedef struct { ++ grub_uint8_t addr[4]; ++} grub_efi_pxe_ipv4_address_t; ++ ++typedef struct { ++ grub_uint8_t addr[16]; ++} grub_efi_pxe_ipv6_address_t; ++ ++typedef struct { ++ grub_uint8_t addr[32]; ++} grub_efi_pxe_mac_address_t; ++ ++typedef union { ++ grub_uint32_t addr[4]; ++ grub_efi_pxe_ipv4_address_t v4; ++ grub_efi_pxe_ipv6_address_t v6; ++} grub_efi_pxe_ip_address_t; + + struct grub_efi_guid + { +@@ -860,6 +877,8 @@ struct grub_efi_ipv6_device_path + grub_efi_uint16_t remote_port; + grub_efi_uint16_t protocol; + grub_efi_uint8_t static_ip_address; ++ grub_efi_uint8_t prefix_length; ++ grub_efi_ipv6_address_t gateway_ip_address; + } GRUB_PACKED; + typedef struct grub_efi_ipv6_device_path grub_efi_ipv6_device_path_t; + +@@ -909,6 +928,15 @@ struct grub_efi_uri_device_path + } GRUB_PACKED; + typedef struct grub_efi_uri_device_path grub_efi_uri_device_path_t; + ++#define GRUB_EFI_DNS_DEVICE_PATH_SUBTYPE 31 ++struct grub_efi_dns_device_path ++{ ++ grub_efi_device_path_t header; ++ grub_efi_uint8_t is_ipv6; ++ grub_efi_pxe_ip_address_t dns_server_ip[0]; ++} GRUB_PACKED; ++typedef struct grub_efi_dns_device_path grub_efi_dns_device_path_t; ++ + #define GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE 10 + + /* Media Device Path. */ +@@ -991,6 +1019,23 @@ struct grub_efi_bios_device_path + } GRUB_PACKED; + typedef struct grub_efi_bios_device_path grub_efi_bios_device_path_t; + ++/* Service Binding definitions */ ++struct grub_efi_service_binding; ++ ++typedef grub_efi_status_t ++(*grub_efi_service_binding_create_child) (struct grub_efi_service_binding *this, ++ grub_efi_handle_t *child_handle); ++ ++typedef grub_efi_status_t ++(*grub_efi_service_binding_destroy_child) (struct grub_efi_service_binding *this, ++ grub_efi_handle_t *child_handle); ++ ++typedef struct grub_efi_service_binding ++{ ++ grub_efi_service_binding_create_child create_child; ++ grub_efi_service_binding_destroy_child destroy_child; ++} grub_efi_service_binding_t; ++ + struct grub_efi_open_protocol_information_entry + { + grub_efi_handle_t agent_handle; +@@ -1482,23 +1527,28 @@ typedef struct grub_efi_simple_text_output_interface grub_efi_simple_text_output + + typedef grub_uint8_t grub_efi_pxe_packet_t[1472]; + +-typedef struct { +- grub_uint8_t addr[4]; +-} grub_efi_pxe_ipv4_address_t; ++typedef grub_efi_uint16_t grub_efi_pxe_base_code_udp_port_t; + +-typedef struct { +- grub_uint8_t addr[16]; +-} grub_efi_pxe_ipv6_address_t; ++typedef enum { ++ GRUB_EFI_PXE_BASE_CODE_TFTP_FIRST, ++ GRUB_EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE, ++ GRUB_EFI_PXE_BASE_CODE_TFTP_READ_FILE, ++ GRUB_EFI_PXE_BASE_CODE_TFTP_WRITE_FILE, ++ GRUB_EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY, ++ GRUB_EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE, ++ GRUB_EFI_PXE_BASE_CODE_MTFTP_READ_FILE, ++ GRUB_EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY, ++ GRUB_EFI_PXE_BASE_CODE_MTFTP_LAST ++} grub_efi_pxe_base_code_tftp_opcode_t; + +-typedef struct { +- grub_uint8_t addr[32]; +-} grub_efi_pxe_mac_address_t; + +-typedef union { +- grub_uint32_t addr[4]; +- grub_efi_pxe_ipv4_address_t v4; +- grub_efi_pxe_ipv6_address_t v6; +-} grub_efi_pxe_ip_address_t; ++typedef struct { ++ grub_efi_ip_address_t mcast_ip; ++ grub_efi_pxe_base_code_udp_port_t c_port; ++ grub_efi_pxe_base_code_udp_port_t s_port; ++ grub_efi_uint16_t listen_timeout; ++ grub_efi_uint16_t transmit_timeout; ++} grub_efi_pxe_base_code_mtftp_info_t; + + #define GRUB_EFI_PXE_BASE_CODE_MAX_IPCNT 8 + typedef struct { +@@ -1548,17 +1598,31 @@ typedef struct grub_efi_pxe_mode + typedef struct grub_efi_pxe + { + grub_uint64_t rev; +- void (*start) (void); ++ grub_efi_status_t (*start) (struct grub_efi_pxe *this, grub_efi_boolean_t use_ipv6); + void (*stop) (void); +- void (*dhcp) (void); ++ grub_efi_status_t (*dhcp) (struct grub_efi_pxe *this, ++ grub_efi_boolean_t sort_offers); + void (*discover) (void); +- void (*mftp) (void); ++ grub_efi_status_t (*mtftp) (struct grub_efi_pxe *this, ++ grub_efi_pxe_base_code_tftp_opcode_t operation, ++ void *buffer_ptr, ++ grub_efi_boolean_t overwrite, ++ grub_efi_uint64_t *buffer_size, ++ grub_efi_uintn_t *block_size, ++ grub_efi_pxe_ip_address_t *server_ip, ++ //grub_efi_ip_address_t *server_ip, ++ grub_efi_char8_t *filename, ++ grub_efi_pxe_base_code_mtftp_info_t *info, ++ grub_efi_boolean_t dont_use_buffer); + void (*udpwrite) (void); + void (*udpread) (void); + void (*setipfilter) (void); + void (*arp) (void); + void (*setparams) (void); +- void (*setstationip) (void); ++ grub_efi_status_t (*set_station_ip) (struct grub_efi_pxe *this, ++ grub_efi_pxe_ip_address_t *new_station_ip, ++ grub_efi_pxe_ip_address_t *new_subnet_mask); ++ //void (*setstationip) (void); + void (*setpackets) (void); + struct grub_efi_pxe_mode *mode; + } grub_efi_pxe_t; +@@ -1800,6 +1864,44 @@ struct grub_efi_ip4_config2_protocol + }; + typedef struct grub_efi_ip4_config2_protocol grub_efi_ip4_config2_protocol_t; + ++struct grub_efi_ip4_route_table { ++ grub_efi_ipv4_address_t subnet_address; ++ grub_efi_ipv4_address_t subnet_mask; ++ grub_efi_ipv4_address_t gateway_address; ++}; ++ ++typedef struct grub_efi_ip4_route_table grub_efi_ip4_route_table_t; ++ ++#define GRUB_EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE 32 ++ ++struct grub_efi_ip4_config2_interface_info { ++ grub_efi_char16_t name[GRUB_EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE]; ++ grub_efi_uint8_t if_type; ++ grub_efi_uint32_t hw_address_size; ++ grub_efi_mac_address_t hw_address; ++ grub_efi_ipv4_address_t station_address; ++ grub_efi_ipv4_address_t subnet_mask; ++ grub_efi_uint32_t route_table_size; ++ grub_efi_ip4_route_table_t *route_table; ++}; ++ ++typedef struct grub_efi_ip4_config2_interface_info grub_efi_ip4_config2_interface_info_t; ++ ++enum grub_efi_ip4_config2_policy { ++ GRUB_EFI_IP4_CONFIG2_POLICY_STATIC, ++ GRUB_EFI_IP4_CONFIG2_POLICY_DHCP, ++ GRUB_EFI_IP4_CONFIG2_POLICY_MAX ++}; ++ ++typedef enum grub_efi_ip4_config2_policy grub_efi_ip4_config2_policy_t; ++ ++struct grub_efi_ip4_config2_manual_address { ++ grub_efi_ipv4_address_t address; ++ grub_efi_ipv4_address_t subnet_mask; ++}; ++ ++typedef struct grub_efi_ip4_config2_manual_address grub_efi_ip4_config2_manual_address_t; ++ + enum grub_efi_ip6_config_data_type { + GRUB_EFI_IP6_CONFIG_DATA_TYPE_INTERFACEINFO, + GRUB_EFI_IP6_CONFIG_DATA_TYPE_ALT_INTERFACEID, +@@ -1834,6 +1936,49 @@ struct grub_efi_ip6_config_protocol + }; + typedef struct grub_efi_ip6_config_protocol grub_efi_ip6_config_protocol_t; + ++enum grub_efi_ip6_config_policy { ++ GRUB_EFI_IP6_CONFIG_POLICY_MANUAL, ++ GRUB_EFI_IP6_CONFIG_POLICY_AUTOMATIC ++}; ++typedef enum grub_efi_ip6_config_policy grub_efi_ip6_config_policy_t; ++ ++struct grub_efi_ip6_address_info { ++ grub_efi_ipv6_address_t address; ++ grub_efi_uint8_t prefix_length; ++}; ++typedef struct grub_efi_ip6_address_info grub_efi_ip6_address_info_t; ++ ++struct grub_efi_ip6_route_table { ++ grub_efi_pxe_ipv6_address_t gateway; ++ grub_efi_pxe_ipv6_address_t destination; ++ grub_efi_uint8_t prefix_length; ++}; ++typedef struct grub_efi_ip6_route_table grub_efi_ip6_route_table_t; ++ ++struct grub_efi_ip6_config_interface_info { ++ grub_efi_char16_t name[32]; ++ grub_efi_uint8_t if_type; ++ grub_efi_uint32_t hw_address_size; ++ grub_efi_mac_address_t hw_address; ++ grub_efi_uint32_t address_info_count; ++ grub_efi_ip6_address_info_t *address_info; ++ grub_efi_uint32_t route_count; ++ grub_efi_ip6_route_table_t *route_table; ++}; ++typedef struct grub_efi_ip6_config_interface_info grub_efi_ip6_config_interface_info_t; ++ ++struct grub_efi_ip6_config_dup_addr_detect_transmits { ++ grub_efi_uint32_t dup_addr_detect_transmits; ++}; ++typedef struct grub_efi_ip6_config_dup_addr_detect_transmits grub_efi_ip6_config_dup_addr_detect_transmits_t; ++ ++struct grub_efi_ip6_config_manual_address { ++ grub_efi_ipv6_address_t address; ++ grub_efi_boolean_t is_anycast; ++ grub_efi_uint8_t prefix_length; ++}; ++typedef struct grub_efi_ip6_config_manual_address grub_efi_ip6_config_manual_address_t; ++ + #if (GRUB_TARGET_SIZEOF_VOID_P == 4) || defined (__ia64__) \ + || defined (__aarch64__) || defined (__MINGW64__) || defined (__CYGWIN__) \ + || defined(__riscv) +diff --git a/include/grub/efi/dhcp.h b/include/grub/efi/dhcp.h +new file mode 100644 +index 0000000000..fdb88eb810 +--- /dev/null ++++ b/include/grub/efi/dhcp.h +@@ -0,0 +1,343 @@ ++#ifndef GRUB_EFI_DHCP_HEADER ++#define GRUB_EFI_DHCP_HEADER 1 ++ ++#define GRUB_EFI_DHCP4_SERVICE_BINDING_PROTOCOL_GUID \ ++ { 0x9d9a39d8, 0xbd42, 0x4a73, \ ++ { 0xa4, 0xd5, 0x8e, 0xe9, 0x4b, 0xe1, 0x13, 0x80 } \ ++ } ++ ++#define GRUB_EFI_DHCP4_PROTOCOL_GUID \ ++ { 0x8a219718, 0x4ef5, 0x4761, \ ++ { 0x91, 0xc8, 0xc0, 0xf0, 0x4b, 0xda, 0x9e, 0x56 } \ ++ } ++ ++#define GRUB_EFI_DHCP6_SERVICE_BINDING_PROTOCOL_GUID \ ++ { 0x9fb9a8a1, 0x2f4a, 0x43a6, \ ++ { 0x88, 0x9c, 0xd0, 0xf7, 0xb6, 0xc4 ,0x7a, 0xd5 } \ ++ } ++ ++#define GRUB_EFI_DHCP6_PROTOCOL_GUID \ ++ { 0x87c8bad7, 0x595, 0x4053, \ ++ { 0x82, 0x97, 0xde, 0xde, 0x39, 0x5f, 0x5d, 0x5b } \ ++ } ++ ++typedef struct grub_efi_dhcp4_protocol grub_efi_dhcp4_protocol_t; ++ ++enum grub_efi_dhcp4_state { ++ GRUB_EFI_DHCP4_STOPPED, ++ GRUB_EFI_DHCP4_INIT, ++ GRUB_EFI_DHCP4_SELECTING, ++ GRUB_EFI_DHCP4_REQUESTING, ++ GRUB_EFI_DHCP4_BOUND, ++ GRUB_EFI_DHCP4_RENEWING, ++ GRUB_EFI_DHCP4_REBINDING, ++ GRUB_EFI_DHCP4_INIT_REBOOT, ++ GRUB_EFI_DHCP4_REBOOTING ++}; ++ ++typedef enum grub_efi_dhcp4_state grub_efi_dhcp4_state_t; ++ ++struct grub_efi_dhcp4_header { ++ grub_efi_uint8_t op_code; ++ grub_efi_uint8_t hw_type; ++ grub_efi_uint8_t hw_addr_len; ++ grub_efi_uint8_t hops; ++ grub_efi_uint32_t xid; ++ grub_efi_uint16_t seconds; ++ grub_efi_uint16_t reserved; ++ grub_efi_ipv4_address_t client_addr; ++ grub_efi_ipv4_address_t your_addr; ++ grub_efi_ipv4_address_t server_addr; ++ grub_efi_ipv4_address_t gateway_addr; ++ grub_efi_uint8_t client_hw_addr[16]; ++ grub_efi_char8_t server_name[64]; ++ grub_efi_char8_t boot_file_name[128]; ++} GRUB_PACKED; ++ ++typedef struct grub_efi_dhcp4_header grub_efi_dhcp4_header_t; ++ ++struct grub_efi_dhcp4_packet { ++ grub_efi_uint32_t size; ++ grub_efi_uint32_t length; ++ struct { ++ grub_efi_dhcp4_header_t header; ++ grub_efi_uint32_t magik; ++ grub_efi_uint8_t option[1]; ++ } dhcp4; ++} GRUB_PACKED; ++ ++typedef struct grub_efi_dhcp4_packet grub_efi_dhcp4_packet_t; ++ ++struct grub_efi_dhcp4_listen_point { ++ grub_efi_ipv4_address_t listen_address; ++ grub_efi_ipv4_address_t subnet_mask; ++ grub_efi_uint16_t listen_port; ++}; ++ ++typedef struct grub_efi_dhcp4_listen_point grub_efi_dhcp4_listen_point_t; ++ ++struct grub_efi_dhcp4_transmit_receive_token { ++ grub_efi_status_t status; ++ grub_efi_event_t completion_event; ++ grub_efi_ipv4_address_t remote_address; ++ grub_efi_uint16_t remote_port; ++ grub_efi_ipv4_address_t gateway_address; ++ grub_efi_uint32_t listen_point_count; ++ grub_efi_dhcp4_listen_point_t *listen_points; ++ grub_efi_uint32_t timeout_value; ++ grub_efi_dhcp4_packet_t *packet; ++ grub_efi_uint32_t response_count; ++ grub_efi_dhcp4_packet_t *response_list; ++}; ++ ++typedef struct grub_efi_dhcp4_transmit_receive_token grub_efi_dhcp4_transmit_receive_token_t; ++ ++enum grub_efi_dhcp4_event { ++ GRUB_EFI_DHCP4_SEND_DISCOVER = 0X01, ++ GRUB_EFI_DHCP4_RCVD_OFFER, ++ GRUB_EFI_DHCP4_SELECT_OFFER, ++ GRUB_EFI_DHCP4_SEND_REQUEST, ++ GRUB_EFI_DHCP4_RCVD_ACK, ++ GRUB_EFI_DHCP4_RCVD_NAK, ++ GRUB_EFI_DHCP4_SEND_DECLINE, ++ GRUB_EFI_DHCP4_BOUND_COMPLETED, ++ GRUB_EFI_DHCP4_ENTER_RENEWING, ++ GRUB_EFI_DHCP4_ENTER_REBINDING, ++ GRUB_EFI_DHCP4_ADDRESS_LOST, ++ GRUB_EFI_DHCP4_FAIL ++}; ++ ++typedef enum grub_efi_dhcp4_event grub_efi_dhcp4_event_t; ++ ++struct grub_efi_dhcp4_packet_option { ++ grub_efi_uint8_t op_code; ++ grub_efi_uint8_t length; ++ grub_efi_uint8_t data[1]; ++} GRUB_PACKED; ++ ++typedef struct grub_efi_dhcp4_packet_option grub_efi_dhcp4_packet_option_t; ++ ++struct grub_efi_dhcp4_config_data { ++ grub_efi_uint32_t discover_try_count; ++ grub_efi_uint32_t *discover_timeout; ++ grub_efi_uint32_t request_try_count; ++ grub_efi_uint32_t *request_timeout; ++ grub_efi_ipv4_address_t client_address; ++ grub_efi_status_t (*dhcp4_callback) ( ++ grub_efi_dhcp4_protocol_t *this, ++ void *context, ++ grub_efi_dhcp4_state_t current_state, ++ grub_efi_dhcp4_event_t dhcp4_event, ++ grub_efi_dhcp4_packet_t *packet, ++ grub_efi_dhcp4_packet_t **new_packet ++ ); ++ void *callback_context; ++ grub_efi_uint32_t option_count; ++ grub_efi_dhcp4_packet_option_t **option_list; ++}; ++ ++typedef struct grub_efi_dhcp4_config_data grub_efi_dhcp4_config_data_t; ++ ++struct grub_efi_dhcp4_mode_data { ++ grub_efi_dhcp4_state_t state; ++ grub_efi_dhcp4_config_data_t config_data; ++ grub_efi_ipv4_address_t client_address; ++ grub_efi_mac_address_t client_mac_address; ++ grub_efi_ipv4_address_t server_address; ++ grub_efi_ipv4_address_t router_address; ++ grub_efi_ipv4_address_t subnet_mask; ++ grub_efi_uint32_t lease_time; ++ grub_efi_dhcp4_packet_t *reply_packet; ++}; ++ ++typedef struct grub_efi_dhcp4_mode_data grub_efi_dhcp4_mode_data_t; ++ ++struct grub_efi_dhcp4_protocol { ++ grub_efi_status_t (*get_mode_data) (grub_efi_dhcp4_protocol_t *this, ++ grub_efi_dhcp4_mode_data_t *dhcp4_mode_data); ++ grub_efi_status_t (*configure) (grub_efi_dhcp4_protocol_t *this, ++ grub_efi_dhcp4_config_data_t *dhcp4_cfg_data); ++ grub_efi_status_t (*start) (grub_efi_dhcp4_protocol_t *this, ++ grub_efi_event_t completion_event); ++ grub_efi_status_t (*renew_rebind) (grub_efi_dhcp4_protocol_t *this, ++ grub_efi_boolean_t rebind_request, ++ grub_efi_event_t completion_event); ++ grub_efi_status_t (*release) (grub_efi_dhcp4_protocol_t *this); ++ grub_efi_status_t (*stop) (grub_efi_dhcp4_protocol_t *this); ++ grub_efi_status_t (*build) (grub_efi_dhcp4_protocol_t *this, ++ grub_efi_dhcp4_packet_t *seed_packet, ++ grub_efi_uint32_t delete_count, ++ grub_efi_uint8_t *delete_list, ++ grub_efi_uint32_t append_count, ++ grub_efi_dhcp4_packet_option_t *append_list[], ++ grub_efi_dhcp4_packet_t **new_packet); ++ grub_efi_status_t (*transmit_receive) (grub_efi_dhcp4_protocol_t *this, ++ grub_efi_dhcp4_transmit_receive_token_t *token); ++ grub_efi_status_t (*parse) (grub_efi_dhcp4_protocol_t *this, ++ grub_efi_dhcp4_packet_t *packet, ++ grub_efi_uint32_t *option_count, ++ grub_efi_dhcp4_packet_option_t *packet_option_list[]); ++}; ++ ++typedef struct grub_efi_dhcp6_protocol grub_efi_dhcp6_protocol_t; ++ ++struct grub_efi_dhcp6_retransmission { ++ grub_efi_uint32_t irt; ++ grub_efi_uint32_t mrc; ++ grub_efi_uint32_t mrt; ++ grub_efi_uint32_t mrd; ++}; ++ ++typedef struct grub_efi_dhcp6_retransmission grub_efi_dhcp6_retransmission_t; ++ ++enum grub_efi_dhcp6_event { ++ GRUB_EFI_DHCP6_SEND_SOLICIT, ++ GRUB_EFI_DHCP6_RCVD_ADVERTISE, ++ GRUB_EFI_DHCP6_SELECT_ADVERTISE, ++ GRUB_EFI_DHCP6_SEND_REQUEST, ++ GRUB_EFI_DHCP6_RCVD_REPLY, ++ GRUB_EFI_DHCP6_RCVD_RECONFIGURE, ++ GRUB_EFI_DHCP6_SEND_DECLINE, ++ GRUB_EFI_DHCP6_SEND_CONFIRM, ++ GRUB_EFI_DHCP6_SEND_RELEASE, ++ GRUB_EFI_DHCP6_SEND_RENEW, ++ GRUB_EFI_DHCP6_SEND_REBIND ++}; ++ ++typedef enum grub_efi_dhcp6_event grub_efi_dhcp6_event_t; ++ ++struct grub_efi_dhcp6_packet_option { ++ grub_efi_uint16_t op_code; ++ grub_efi_uint16_t op_len; ++ grub_efi_uint8_t data[1]; ++} GRUB_PACKED; ++ ++typedef struct grub_efi_dhcp6_packet_option grub_efi_dhcp6_packet_option_t; ++ ++struct grub_efi_dhcp6_header { ++ grub_efi_uint32_t transaction_id:24; ++ grub_efi_uint32_t message_type:8; ++} GRUB_PACKED; ++ ++typedef struct grub_efi_dhcp6_header grub_efi_dhcp6_header_t; ++ ++struct grub_efi_dhcp6_packet { ++ grub_efi_uint32_t size; ++ grub_efi_uint32_t length; ++ struct { ++ grub_efi_dhcp6_header_t header; ++ grub_efi_uint8_t option[1]; ++ } dhcp6; ++} GRUB_PACKED; ++ ++typedef struct grub_efi_dhcp6_packet grub_efi_dhcp6_packet_t; ++ ++struct grub_efi_dhcp6_ia_address { ++ grub_efi_ipv6_address_t ip_address; ++ grub_efi_uint32_t preferred_lifetime; ++ grub_efi_uint32_t valid_lifetime; ++}; ++ ++typedef struct grub_efi_dhcp6_ia_address grub_efi_dhcp6_ia_address_t; ++ ++enum grub_efi_dhcp6_state { ++ GRUB_EFI_DHCP6_INIT, ++ GRUB_EFI_DHCP6_SELECTING, ++ GRUB_EFI_DHCP6_REQUESTING, ++ GRUB_EFI_DHCP6_DECLINING, ++ GRUB_EFI_DHCP6_CONFIRMING, ++ GRUB_EFI_DHCP6_RELEASING, ++ GRUB_EFI_DHCP6_BOUND, ++ GRUB_EFI_DHCP6_RENEWING, ++ GRUB_EFI_DHCP6_REBINDING ++}; ++ ++typedef enum grub_efi_dhcp6_state grub_efi_dhcp6_state_t; ++ ++#define GRUB_EFI_DHCP6_IA_TYPE_NA 3 ++#define GRUB_EFI_DHCP6_IA_TYPE_TA 4 ++ ++struct grub_efi_dhcp6_ia_descriptor { ++ grub_efi_uint16_t type; ++ grub_efi_uint32_t ia_id; ++}; ++ ++typedef struct grub_efi_dhcp6_ia_descriptor grub_efi_dhcp6_ia_descriptor_t; ++ ++struct grub_efi_dhcp6_ia { ++ grub_efi_dhcp6_ia_descriptor_t descriptor; ++ grub_efi_dhcp6_state_t state; ++ grub_efi_dhcp6_packet_t *reply_packet; ++ grub_efi_uint32_t ia_address_count; ++ grub_efi_dhcp6_ia_address_t ia_address[1]; ++}; ++ ++typedef struct grub_efi_dhcp6_ia grub_efi_dhcp6_ia_t; ++ ++struct grub_efi_dhcp6_duid { ++ grub_efi_uint16_t length; ++ grub_efi_uint8_t duid[1]; ++}; ++ ++typedef struct grub_efi_dhcp6_duid grub_efi_dhcp6_duid_t; ++ ++struct grub_efi_dhcp6_mode_data { ++ grub_efi_dhcp6_duid_t *client_id; ++ grub_efi_dhcp6_ia_t *ia; ++}; ++ ++typedef struct grub_efi_dhcp6_mode_data grub_efi_dhcp6_mode_data_t; ++ ++struct grub_efi_dhcp6_config_data { ++ grub_efi_status_t (*dhcp6_callback) (grub_efi_dhcp6_protocol_t this, ++ void *context, ++ grub_efi_dhcp6_state_t current_state, ++ grub_efi_dhcp6_event_t dhcp6_event, ++ grub_efi_dhcp6_packet_t *packet, ++ grub_efi_dhcp6_packet_t **new_packet); ++ void *callback_context; ++ grub_efi_uint32_t option_count; ++ grub_efi_dhcp6_packet_option_t **option_list; ++ grub_efi_dhcp6_ia_descriptor_t ia_descriptor; ++ grub_efi_event_t ia_info_event; ++ grub_efi_boolean_t reconfigure_accept; ++ grub_efi_boolean_t rapid_commit; ++ grub_efi_dhcp6_retransmission_t *solicit_retransmission; ++}; ++ ++typedef struct grub_efi_dhcp6_config_data grub_efi_dhcp6_config_data_t; ++ ++struct grub_efi_dhcp6_protocol { ++ grub_efi_status_t (*get_mode_data) (grub_efi_dhcp6_protocol_t *this, ++ grub_efi_dhcp6_mode_data_t *dhcp6_mode_data, ++ grub_efi_dhcp6_config_data_t *dhcp6_config_data); ++ grub_efi_status_t (*configure) (grub_efi_dhcp6_protocol_t *this, ++ grub_efi_dhcp6_config_data_t *dhcp6_cfg_data); ++ grub_efi_status_t (*start) (grub_efi_dhcp6_protocol_t *this); ++ grub_efi_status_t (*info_request) (grub_efi_dhcp6_protocol_t *this, ++ grub_efi_boolean_t send_client_id, ++ grub_efi_dhcp6_packet_option_t *option_request, ++ grub_efi_uint32_t option_count, ++ grub_efi_dhcp6_packet_option_t *option_list[], ++ grub_efi_dhcp6_retransmission_t *retransmission, ++ grub_efi_event_t timeout_event, ++ grub_efi_status_t (*reply_callback) (grub_efi_dhcp6_protocol_t *this, ++ void *context, ++ grub_efi_dhcp6_packet_t *packet), ++ void *callback_context); ++ grub_efi_status_t (*renew_rebind) (grub_efi_dhcp6_protocol_t *this, ++ grub_efi_boolean_t rebind_request); ++ grub_efi_status_t (*decline) (grub_efi_dhcp6_protocol_t *this, ++ grub_efi_uint32_t address_count, ++ grub_efi_ipv6_address_t *addresses); ++ grub_efi_status_t (*release) (grub_efi_dhcp6_protocol_t *this, ++ grub_efi_uint32_t address_count, ++ grub_efi_ipv6_address_t *addresses); ++ grub_efi_status_t (*stop) (grub_efi_dhcp6_protocol_t *this); ++ grub_efi_status_t (*parse) (grub_efi_dhcp6_protocol_t *this, ++ grub_efi_dhcp6_packet_t *packet, ++ grub_efi_uint32_t *option_count, ++ grub_efi_dhcp6_packet_option_t *packet_option_list[]); ++}; ++ ++#endif /* ! GRUB_EFI_DHCP_HEADER */ +diff --git a/include/grub/efi/http.h b/include/grub/efi/http.h +new file mode 100644 +index 0000000000..c5e9a89f50 +--- /dev/null ++++ b/include/grub/efi/http.h +@@ -0,0 +1,215 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2006,2007,2008 Free Software Foundation, Inc. ++ * ++ * GRUB is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB. If not, see . ++ */ ++ ++#ifndef GRUB_EFI_HTTP_HEADER ++#define GRUB_EFI_HTTP_HEADER 1 ++ ++#include ++#include ++#include ++ ++#define GRUB_EFI_HTTP_SERVICE_BINDING_PROTOCOL_GUID \ ++ { 0xbdc8e6af, 0xd9bc, 0x4379, \ ++ { 0xa7, 0x2a, 0xe0, 0xc4, 0xe7, 0x5d, 0xae, 0x1c } \ ++ } ++ ++#define GRUB_EFI_HTTP_PROTOCOL_GUID \ ++ { 0x7A59B29B, 0x910B, 0x4171, \ ++ { 0x82, 0x42, 0xA8, 0x5A, 0x0D, 0xF2, 0x5B, 0x5B } \ ++ } ++ ++#define EFIHTTP_WAIT_TIME 10000 // 10000ms = 10s ++#define EFIHTTP_RX_BUF_LEN 10240 ++ ++//****************************************** ++// Protocol Interface Structure ++//****************************************** ++struct grub_efi_http; ++ ++//****************************************** ++// EFI_HTTP_VERSION ++//****************************************** ++typedef enum { ++ GRUB_EFI_HTTPVERSION10, ++ GRUB_EFI_HTTPVERSION11, ++ GRUB_EFI_HTTPVERSIONUNSUPPORTED ++} grub_efi_http_version_t; ++ ++//****************************************** ++// EFI_HTTPv4_ACCESS_POINT ++//****************************************** ++typedef struct { ++ grub_efi_boolean_t use_default_address; ++ grub_efi_ipv4_address_t local_address; ++ grub_efi_ipv4_address_t local_subnet; ++ grub_efi_uint16_t local_port; ++} grub_efi_httpv4_access_point_t; ++ ++//****************************************** ++// EFI_HTTPv6_ACCESS_POINT ++//****************************************** ++typedef struct { ++ grub_efi_ipv6_address_t local_address; ++ grub_efi_uint16_t local_port; ++} grub_efi_httpv6_access_point_t; ++ ++//****************************************** ++// EFI_HTTP_CONFIG_DATA ++//****************************************** ++typedef struct { ++ grub_efi_http_version_t http_version; ++ grub_efi_uint32_t timeout_millisec; ++ grub_efi_boolean_t local_address_is_ipv6; ++ union { ++ grub_efi_httpv4_access_point_t *ipv4_node; ++ grub_efi_httpv6_access_point_t *ipv6_node; ++ } access_point; ++} grub_efi_http_config_data_t; ++ ++//****************************************** ++// EFI_HTTP_METHOD ++//****************************************** ++typedef enum { ++ GRUB_EFI_HTTPMETHODGET, ++ GRUB_EFI_HTTPMETHODPOST, ++ GRUB_EFI_HTTPMETHODPATCH, ++ GRUB_EFI_HTTPMETHODOPTIONS, ++ GRUB_EFI_HTTPMETHODCONNECT, ++ GRUB_EFI_HTTPMETHODHEAD, ++ GRUB_EFI_HTTPMETHODPUT, ++ GRUB_EFI_HTTPMETHODDELETE, ++ GRUB_EFI_HTTPMETHODTRACE, ++} grub_efi_http_method_t; ++ ++//****************************************** ++// EFI_HTTP_REQUEST_DATA ++//****************************************** ++typedef struct { ++ grub_efi_http_method_t method; ++ grub_efi_char16_t *url; ++} grub_efi_http_request_data_t; ++ ++typedef enum { ++ GRUB_EFI_HTTP_STATUS_UNSUPPORTED_STATUS = 0, ++ GRUB_EFI_HTTP_STATUS_100_CONTINUE, ++ GRUB_EFI_HTTP_STATUS_101_SWITCHING_PROTOCOLS, ++ GRUB_EFI_HTTP_STATUS_200_OK, ++ GRUB_EFI_HTTP_STATUS_201_CREATED, ++ GRUB_EFI_HTTP_STATUS_202_ACCEPTED, ++ GRUB_EFI_HTTP_STATUS_203_NON_AUTHORITATIVE_INFORMATION, ++ GRUB_EFI_HTTP_STATUS_204_NO_CONTENT, ++ GRUB_EFI_HTTP_STATUS_205_RESET_CONTENT, ++ GRUB_EFI_HTTP_STATUS_206_PARTIAL_CONTENT, ++ GRUB_EFI_HTTP_STATUS_300_MULTIPLE_CHIOCES, ++ GRUB_EFI_HTTP_STATUS_301_MOVED_PERMANENTLY, ++ GRUB_EFI_HTTP_STATUS_302_FOUND, ++ GRUB_EFI_HTTP_STATUS_303_SEE_OTHER, ++ GRUB_EFI_HTTP_STATUS_304_NOT_MODIFIED, ++ GRUB_EFI_HTTP_STATUS_305_USE_PROXY, ++ GRUB_EFI_HTTP_STATUS_307_TEMPORARY_REDIRECT, ++ GRUB_EFI_HTTP_STATUS_400_BAD_REQUEST, ++ GRUB_EFI_HTTP_STATUS_401_UNAUTHORIZED, ++ GRUB_EFI_HTTP_STATUS_402_PAYMENT_REQUIRED, ++ GRUB_EFI_HTTP_STATUS_403_FORBIDDEN, ++ GRUB_EFI_HTTP_STATUS_404_NOT_FOUND, ++ GRUB_EFI_HTTP_STATUS_405_METHOD_NOT_ALLOWED, ++ GRUB_EFI_HTTP_STATUS_406_NOT_ACCEPTABLE, ++ GRUB_EFI_HTTP_STATUS_407_PROXY_AUTHENTICATION_REQUIRED, ++ GRUB_EFI_HTTP_STATUS_408_REQUEST_TIME_OUT, ++ GRUB_EFI_HTTP_STATUS_409_CONFLICT, ++ GRUB_EFI_HTTP_STATUS_410_GONE, ++ GRUB_EFI_HTTP_STATUS_411_LENGTH_REQUIRED, ++ GRUB_EFI_HTTP_STATUS_412_PRECONDITION_FAILED, ++ GRUB_EFI_HTTP_STATUS_413_REQUEST_ENTITY_TOO_LARGE, ++ GRUB_EFI_HTTP_STATUS_414_REQUEST_URI_TOO_LARGE, ++ GRUB_EFI_HTTP_STATUS_415_UNSUPPORTED_MEDIA_TYPE, ++ GRUB_EFI_HTTP_STATUS_416_REQUESTED_RANGE_NOT_SATISFIED, ++ GRUB_EFI_HTTP_STATUS_417_EXPECTATION_FAILED, ++ GRUB_EFI_HTTP_STATUS_500_INTERNAL_SERVER_ERROR, ++ GRUB_EFI_HTTP_STATUS_501_NOT_IMPLEMENTED, ++ GRUB_EFI_HTTP_STATUS_502_BAD_GATEWAY, ++ GRUB_EFI_HTTP_STATUS_503_SERVICE_UNAVAILABLE, ++ GRUB_EFI_HTTP_STATUS_504_GATEWAY_TIME_OUT, ++ GRUB_EFI_HTTP_STATUS_505_HTTP_VERSION_NOT_SUPPORTED ++} grub_efi_http_status_code_t; ++ ++//****************************************** ++// EFI_HTTP_RESPONSE_DATA ++//****************************************** ++typedef struct { ++ grub_efi_http_status_code_t status_code; ++} grub_efi_http_response_data_t; ++ ++//****************************************** ++// EFI_HTTP_HEADER ++//****************************************** ++typedef struct { ++ grub_efi_char8_t *field_name; ++ grub_efi_char8_t *field_value; ++} grub_efi_http_header_t; ++ ++//****************************************** ++// EFI_HTTP_MESSAGE ++//****************************************** ++typedef struct { ++ union { ++ grub_efi_http_request_data_t *request; ++ grub_efi_http_response_data_t *response; ++ } data; ++ grub_efi_uint32_t header_count; ++ grub_efi_http_header_t *headers; ++ grub_efi_uint32_t body_length; ++ void *body; ++} grub_efi_http_message_t; ++ ++//****************************************** ++// EFI_HTTP_TOKEN ++//****************************************** ++typedef struct { ++ grub_efi_event_t event; ++ grub_efi_status_t status; ++ grub_efi_http_message_t *message; ++} grub_efi_http_token_t; ++ ++struct grub_efi_http { ++ grub_efi_status_t ++ (*get_mode_data) (struct grub_efi_http *this, ++ grub_efi_http_config_data_t *http_config_data); ++ ++ grub_efi_status_t ++ (*configure) (struct grub_efi_http *this, ++ grub_efi_http_config_data_t *http_config_data); ++ ++ grub_efi_status_t ++ (*request) (struct grub_efi_http *this, ++ grub_efi_http_token_t *token); ++ ++ grub_efi_status_t ++ (*cancel) (struct grub_efi_http *this, ++ grub_efi_http_token_t *token); ++ ++ grub_efi_status_t ++ (*response) (struct grub_efi_http *this, ++ grub_efi_http_token_t *token); ++ ++ grub_efi_status_t ++ (*poll) (struct grub_efi_http *this); ++}; ++typedef struct grub_efi_http grub_efi_http_t; ++ ++#endif /* !GRUB_EFI_HTTP_HEADER */ +diff --git a/include/grub/net/efi.h b/include/grub/net/efi.h +new file mode 100644 +index 0000000000..de90d223e8 +--- /dev/null ++++ b/include/grub/net/efi.h +@@ -0,0 +1,144 @@ ++#ifndef GRUB_NET_EFI_HEADER ++#define GRUB_NET_EFI_HEADER 1 ++ ++#include ++#include ++#include ++#include ++ ++typedef struct grub_efi_net_interface grub_efi_net_interface_t; ++typedef struct grub_efi_net_ip_config grub_efi_net_ip_config_t; ++typedef union grub_efi_net_ip_address grub_efi_net_ip_address_t; ++typedef struct grub_efi_net_ip_manual_address grub_efi_net_ip_manual_address_t; ++ ++struct grub_efi_net_interface ++{ ++ char *name; ++ int prefer_ip6; ++ struct grub_efi_net_device *dev; ++ struct grub_efi_net_io *io; ++ grub_efi_net_ip_config_t *ip_config; ++ int io_type; ++ struct grub_efi_net_interface *next; ++}; ++ ++#define efi_net_interface_get_hw_address(inf) inf->ip_config->get_hw_address (inf->dev) ++#define efi_net_interface_get_address(inf) inf->ip_config->get_address (inf->dev) ++#define efi_net_interface_get_route_table(inf) inf->ip_config->get_route_table (inf->dev) ++#define efi_net_interface_set_address(inf, addr, with_subnet) inf->ip_config->set_address (inf->dev, addr, with_subnet) ++#define efi_net_interface_set_gateway(inf, addr) inf->ip_config->set_gateway (inf->dev, addr) ++#define efi_net_interface_set_dns(inf, addr) inf->ip_config->set_dns (inf->dev, addr) ++ ++struct grub_efi_net_ip_config ++{ ++ char * (*get_hw_address) (struct grub_efi_net_device *dev); ++ char * (*get_address) (struct grub_efi_net_device *dev); ++ char ** (*get_route_table) (struct grub_efi_net_device *dev); ++ grub_efi_net_interface_t * (*best_interface) (struct grub_efi_net_device *dev, grub_efi_net_ip_address_t *address); ++ int (*set_address) (struct grub_efi_net_device *dev, grub_efi_net_ip_manual_address_t *net_ip, int with_subnet); ++ int (*set_gateway) (struct grub_efi_net_device *dev, grub_efi_net_ip_address_t *address); ++ int (*set_dns) (struct grub_efi_net_device *dev, grub_efi_net_ip_address_t *dns); ++}; ++ ++union grub_efi_net_ip_address ++{ ++ grub_efi_ipv4_address_t ip4; ++ grub_efi_ipv6_address_t ip6; ++}; ++ ++struct grub_efi_net_ip_manual_address ++{ ++ int is_ip6; ++ union ++ { ++ grub_efi_ip4_config2_manual_address_t ip4; ++ grub_efi_ip6_config_manual_address_t ip6; ++ }; ++}; ++ ++struct grub_efi_net_device ++{ ++ grub_efi_handle_t handle; ++ grub_efi_ip4_config2_protocol_t *ip4_config; ++ grub_efi_ip6_config_protocol_t *ip6_config; ++ grub_efi_handle_t http_handle; ++ grub_efi_http_t *http; ++ grub_efi_handle_t ip4_pxe_handle; ++ grub_efi_pxe_t *ip4_pxe; ++ grub_efi_handle_t ip6_pxe_handle; ++ grub_efi_pxe_t *ip6_pxe; ++ grub_efi_handle_t dhcp4_handle; ++ grub_efi_dhcp4_protocol_t *dhcp4; ++ grub_efi_handle_t dhcp6_handle; ++ grub_efi_dhcp6_protocol_t *dhcp6; ++ char *card_name; ++ grub_efi_net_interface_t *net_interfaces; ++ struct grub_efi_net_device *next; ++}; ++ ++struct grub_efi_net_io ++{ ++ void (*configure) (struct grub_efi_net_device *dev, int prefer_ip6); ++ grub_err_t (*open) (struct grub_efi_net_device *dev, ++ int prefer_ip6, ++ grub_file_t file, ++ const char *filename, ++ int type); ++ grub_ssize_t (*read) (struct grub_efi_net_device *dev, ++ int prefer_ip6, ++ grub_file_t file, ++ char *buf, ++ grub_size_t len); ++ grub_err_t (*close) (struct grub_efi_net_device *dev, ++ int prefer_ip6, ++ grub_file_t file); ++}; ++ ++extern struct grub_efi_net_device *net_devices; ++ ++extern struct grub_efi_net_io io_http; ++extern struct grub_efi_net_io io_pxe; ++ ++extern grub_efi_net_ip_config_t *efi_net_ip4_config; ++extern grub_efi_net_ip_config_t *efi_net_ip6_config; ++ ++char * ++grub_efi_ip4_address_to_string (grub_efi_ipv4_address_t *address); ++ ++char * ++grub_efi_ip6_address_to_string (grub_efi_pxe_ipv6_address_t *address); ++ ++char * ++grub_efi_hw_address_to_string (grub_efi_uint32_t hw_address_size, grub_efi_mac_address_t hw_address); ++ ++int ++grub_efi_string_to_ip4_address (const char *val, grub_efi_ipv4_address_t *address, const char **rest); ++ ++int ++grub_efi_string_to_ip6_address (const char *val, grub_efi_ipv6_address_t *address, const char **rest); ++ ++char * ++grub_efi_ip6_interface_name (struct grub_efi_net_device *dev); ++ ++char * ++grub_efi_ip4_interface_name (struct grub_efi_net_device *dev); ++ ++grub_efi_net_interface_t * ++grub_efi_net_create_interface (struct grub_efi_net_device *dev, ++ const char *interface_name, ++ grub_efi_net_ip_manual_address_t *net_ip, ++ int has_subnet); ++ ++int grub_efi_net_fs_init (void); ++void grub_efi_net_fs_fini (void); ++int grub_efi_net_boot_from_https (void); ++int grub_efi_net_boot_from_opa (void); ++ ++extern grub_command_func_t grub_efi_net_list_routes; ++extern grub_command_func_t grub_efi_net_list_cards; ++extern grub_command_func_t grub_efi_net_list_addrs; ++extern grub_command_func_t grub_efi_net_add_addr; ++extern grub_command_func_t grub_efi_net_bootp; ++extern grub_command_func_t grub_efi_net_bootp6; ++ ++#endif /* ! GRUB_NET_EFI_HEADER */ diff -Nru grub2-2.04/debian/patches/suse-AUDIT-0-http-boot-tracker-bug.patch grub2-2.04/debian/patches/suse-AUDIT-0-http-boot-tracker-bug.patch --- grub2-2.04/debian/patches/suse-AUDIT-0-http-boot-tracker-bug.patch 1970-01-01 00:00:00.000000000 +0000 +++ grub2-2.04/debian/patches/suse-AUDIT-0-http-boot-tracker-bug.patch 2021-02-11 16:22:35.000000000 +0000 @@ -0,0 +1,69 @@ +From e6dd05425d8776625e032133bb96f78fe66ad43b Mon Sep 17 00:00:00 2001 +From: Sebastian Krahmer +Date: Tue, 28 Nov 2017 17:24:38 +0800 +Subject: AUDIT-0: http boot tracker bug + +Fixing a memory leak in case of error, and a integer overflow, leading to a +heap overflow due to overly large chunk sizes. + +We need to check against some maximum value, otherwise values like 0xffffffff +will eventually lead in the allocation functions to small sized buffers, since +the len is rounded up to the next reasonable alignment. The following memcpy +will then smash the heap, leading to RCE. + +This is no big issue for pure http boot, since its going to execute an +untrusted kernel anyway, but it will break trusted boot scenarios, where only +signed code is allowed to be executed. + +Signed-off-by: Michael Chang + +Origin: SUSE +UEFI HTTP and related network protocol support (FATE#320130) +Patch420: 0001-add-support-for-UEFI-network-protocols.patch +Patch421: 0002-AUDIT-0-http-boot-tracker-bug.patch + +Patch-Name: suse-AUDIT-0-http-boot-tracker-bug.patch +--- + grub-core/net/efi/net.c | 4 +++- + grub-core/net/http.c | 5 ++++- + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/grub-core/net/efi/net.c b/grub-core/net/efi/net.c +index 2fe5fb63ca..7aece1425b 100644 +--- a/grub-core/net/efi/net.c ++++ b/grub-core/net/efi/net.c +@@ -654,8 +654,10 @@ grub_efihttp_chunk_read (grub_file_t file, char *buf, + + rd = efi_net_interface (read, file, chunk, sz); + +- if (rd <= 0) ++ if (rd <= 0) { ++ grub_free (chunk); + return rd; ++ } + + if (buf) + { +diff --git a/grub-core/net/http.c b/grub-core/net/http.c +index f182d7b871..5004ecfee4 100644 +--- a/grub-core/net/http.c ++++ b/grub-core/net/http.c +@@ -31,7 +31,8 @@ GRUB_MOD_LICENSE ("GPLv3+"); + + enum + { +- HTTP_PORT = 80 ++ HTTP_PORT = 80, ++ HTTP_MAX_CHUNK_SIZE = 0x80000000 + }; + + +@@ -78,6 +79,8 @@ parse_line (grub_file_t file, http_data_t data, char *ptr, grub_size_t len) + if (data->in_chunk_len == 2) + { + data->chunk_rem = grub_strtoul (ptr, 0, 16); ++ if (data->chunk_rem > HTTP_MAX_CHUNK_SIZE) ++ return GRUB_ERR_NET_PACKET_TOO_BIG; + grub_errno = GRUB_ERR_NONE; + if (data->chunk_rem == 0) + { diff -Nru grub2-2.04/debian/patches/suse-grub.texi-add-net_bootp6-document.patch grub2-2.04/debian/patches/suse-grub.texi-add-net_bootp6-document.patch --- grub2-2.04/debian/patches/suse-grub.texi-add-net_bootp6-document.patch 1970-01-01 00:00:00.000000000 +0000 +++ grub2-2.04/debian/patches/suse-grub.texi-add-net_bootp6-document.patch 2021-02-11 16:22:35.000000000 +0000 @@ -0,0 +1,50 @@ +From 24b14f5c2188eb2fc44d774845b21f10f8fbcedc Mon Sep 17 00:00:00 2001 +From: Michael Chang +Date: Tue, 5 May 2015 14:19:24 +0800 +Subject: grub.texi: Add net_bootp6 document + +Update grub documentation for net_bootp6 command. + +Signed-off-by: Michael Chang +Signed-off-by: Ken Lin + +Patch-Name: suse-grub.texi-add-net_bootp6-document.patch +--- + docs/grub.texi | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/docs/grub.texi b/docs/grub.texi +index d573f32cbb..1d60218bc4 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -5396,6 +5396,7 @@ This command is only available on AArch64 systems. + * net_add_dns:: Add a DNS server + * net_add_route:: Add routing entry + * net_bootp:: Perform a bootp autoconfiguration ++* net_bootp6:: Perform a DHCPv6 autoconfiguration + * net_del_addr:: Remove IP address from interface + * net_del_dns:: Remove a DNS server + * net_del_route:: Remove a route entry +@@ -5477,6 +5478,22 @@ Sets environment variable @samp{net_}@var{}@samp{_dhcp_extensionspath} + + @end deffn + ++@node net_bootp6 ++@subsection net_bootp6 ++ ++@deffn Command net_bootp6 [@var{card}] ++Perform configuration of @var{card} using DHCPv6 protocol. If no card name is ++specified, try to configure all existing cards. If configuration was ++successful, interface with name @var{card}@samp{:dhcp6} and configured address ++is added to @var{card}. ++ ++@table @samp ++@item 1 (Domain Name Server) ++Adds all servers from option value to the list of servers used during name ++resolution. ++@end table ++ ++@end deffn + + @node net_del_addr + @subsection net_del_addr diff -Nru grub2-2.04/debian/patches/suse-search-for-specific-config-files-for-netboot.patch grub2-2.04/debian/patches/suse-search-for-specific-config-files-for-netboot.patch --- grub2-2.04/debian/patches/suse-search-for-specific-config-files-for-netboot.patch 1970-01-01 00:00:00.000000000 +0000 +++ grub2-2.04/debian/patches/suse-search-for-specific-config-files-for-netboot.patch 2021-02-11 16:22:35.000000000 +0000 @@ -0,0 +1,230 @@ +From 467fea2d8a8f78af2d04fc5a65e2f19c0ea0be6a Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Wed, 22 Jan 2020 12:01:55 +0100 +Subject: normal/main: Search for specific config files for netboot + +This patch implements a search for a specific configuration when the config +file is on a remoteserver. It uses the following order: + 1) DHCP client UUID option. + 2) MAC address (in lower case hexadecimal with dash separators); + 3) IP (in upper case hexadecimal) or IPv6; + 4) The original grub.cfg file. + +This procedure is similar to what is used by pxelinux and yaboot: +http://www.syslinux.org/wiki/index.php/PXELINUX#config + +It is enabled by default but can be disabled by setting the environment +variable "feature_net_search_cfg" to "n" in an embedded configuration. + +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=873406 + +Signed-off-by: Paulo Flabiano Smorigo +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Daniel Kiper + +Patch-Name: suse-search-for-specific-config-files-for-netboot.patch +--- + grub-core/net/net.c | 131 ++++++++++++++++++++++++++++++++++++++++ + grub-core/normal/main.c | 26 ++++++-- + include/grub/net.h | 2 + + 3 files changed, 155 insertions(+), 4 deletions(-) + +diff --git a/grub-core/net/net.c b/grub-core/net/net.c +index dfe29db4ca..a008d06a0b 100644 +--- a/grub-core/net/net.c ++++ b/grub-core/net/net.c +@@ -1825,6 +1825,137 @@ grub_net_restore_hw (void) + return GRUB_ERR_NONE; + } + ++grub_err_t ++grub_net_search_config_file (char *config) ++{ ++ grub_size_t config_len; ++ char *suffix; ++ ++ auto int search_through (grub_size_t num_tries, grub_size_t slice_size); ++ int search_through (grub_size_t num_tries, grub_size_t slice_size) ++ { ++ while (num_tries-- > 0) ++ { ++ grub_file_t file; ++ ++ grub_dprintf ("net", "attempt to fetch config %s\n", config); ++ ++ file = grub_file_open (config, GRUB_FILE_TYPE_CONFIG); ++ ++ if (file) ++ { ++ grub_file_close (file); ++ return 0; ++ } ++ else ++ { ++ if (grub_errno == GRUB_ERR_IO) ++ grub_errno = GRUB_ERR_NONE; ++ } ++ ++ if (grub_strlen (suffix) < slice_size) ++ break; ++ ++ config[grub_strlen (config) - slice_size] = '\0'; ++ } ++ ++ return 1; ++ } ++ ++ config_len = grub_strlen (config); ++ config[config_len] = '-'; ++ suffix = config + config_len + 1; ++ ++ struct grub_net_network_level_interface *inf; ++ FOR_NET_NETWORK_LEVEL_INTERFACES (inf) ++ { ++ /* By the Client UUID. */ ++ char *ptr; ++ int client_uuid_len; ++ char *client_uuid_var; ++ const char *client_uuid; ++ ++ client_uuid_len = sizeof ("net_") + grub_strlen (inf->name) + ++ sizeof ("_clientuuid") + 1; ++ ++ client_uuid_var = grub_zalloc (client_uuid_len); ++ if (!client_uuid_var) ++ return grub_errno; ++ ++ grub_snprintf (client_uuid_var, client_uuid_len, ++ "net_%s_clientuuid", inf->name); ++ ++ client_uuid = grub_env_get (client_uuid_var); ++ grub_free (client_uuid_var); ++ ++ if (client_uuid) ++ { ++ grub_strcpy (suffix, client_uuid); ++ if (search_through (1, 0) == 0) ++ return GRUB_ERR_NONE; ++ } ++ ++ /* By the MAC address. */ ++ ++ /* Add ethernet type */ ++ grub_strcpy (suffix, "01-"); ++ ++ grub_net_hwaddr_to_str (&inf->hwaddress, suffix + 3); ++ ++ for (ptr = suffix; *ptr; ptr++) ++ if (*ptr == ':') ++ *ptr = '-'; ++ ++ if (search_through (1, 0) == 0) ++ return GRUB_ERR_NONE; ++ ++ /* By IP address */ ++ ++ switch ((&inf->address)->type) ++ { ++ case GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4: ++ { ++ grub_uint32_t n = grub_be_to_cpu32 ((&inf->address)->ipv4); ++ ++ grub_snprintf (suffix, GRUB_NET_MAX_STR_ADDR_LEN, "%02X%02X%02X%02X", \ ++ ((n >> 24) & 0xff), ((n >> 16) & 0xff), \ ++ ((n >> 8) & 0xff), ((n >> 0) & 0xff)); ++ ++ if (search_through (8, 1) == 0) ++ return GRUB_ERR_NONE; ++ break; ++ } ++ case GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6: ++ { ++ char buf[GRUB_NET_MAX_STR_ADDR_LEN]; ++ struct grub_net_network_level_address base; ++ base.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6; ++ grub_memcpy (&base.ipv6, ((&inf->address)->ipv6), 16); ++ grub_net_addr_to_str (&base, buf); ++ ++ for (ptr = buf; *ptr; ptr++) ++ if (*ptr == ':') ++ *ptr = '-'; ++ ++ grub_snprintf (suffix, GRUB_NET_MAX_STR_ADDR_LEN, "%s", buf); ++ if (search_through (1, 0) == 0) ++ return GRUB_ERR_NONE; ++ break; ++ } ++ case GRUB_NET_NETWORK_LEVEL_PROTOCOL_DHCP_RECV: ++ return grub_error (GRUB_ERR_BUG, "shouldn't reach here"); ++ default: ++ return grub_error (GRUB_ERR_BUG, ++ "unsupported address type %d", (&inf->address)->type); ++ } ++ } ++ ++ /* Remove the remaining minus sign at the end. */ ++ config[config_len] = '\0'; ++ ++ return GRUB_ERR_NONE; ++} ++ + static struct grub_preboot *fini_hnd; + + static grub_command_t cmd_addaddr, cmd_deladdr, cmd_addroute, cmd_delroute; +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index d25a8212c7..99faf41a8d 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -18,6 +18,7 @@ + */ + + #include ++#include + #include + #include + #include +@@ -323,10 +324,27 @@ grub_cmd_normal (struct grub_command *cmd __attribute__ ((unused)), + + prefix = grub_env_get ("prefix"); + if (prefix) +- { +- config = grub_xasprintf ("%s/grub.cfg", prefix); +- if (! config) +- goto quit; ++ { ++ grub_size_t config_len; ++ int disable_net_search = 0; ++ const char *net_search_cfg; ++ ++ config_len = grub_strlen (prefix) + ++ sizeof ("/grub.cfg-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"); ++ config = grub_malloc (config_len); ++ ++ if (!config) ++ goto quit; ++ ++ grub_snprintf (config, config_len, "%s/grub.cfg", prefix); ++ ++ net_search_cfg = grub_env_get ("feature_net_search_cfg"); ++ if (net_search_cfg && net_search_cfg[0] == 'n') ++ disable_net_search = 1; ++ ++ if (grub_strncmp (prefix + 1, "tftp", sizeof ("tftp") - 1) == 0 && ++ !disable_net_search) ++ grub_net_search_config_file (config); + + grub_enter_normal_mode (config); + grub_free (config); +diff --git a/include/grub/net.h b/include/grub/net.h +index 66375af068..4585d0497b 100644 +--- a/include/grub/net.h ++++ b/include/grub/net.h +@@ -646,6 +646,8 @@ grub_net_add_dns_server (const struct grub_net_network_level_address *s); + void + grub_net_remove_dns_server (const struct grub_net_network_level_address *s); + ++grub_err_t ++grub_net_search_config_file (char *config); + + extern char *grub_net_default_server; + diff -Nru grub2-2.04/debian/patches/tftp-rollover-block-counter.patch grub2-2.04/debian/patches/tftp-rollover-block-counter.patch --- grub2-2.04/debian/patches/tftp-rollover-block-counter.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/tftp-rollover-block-counter.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From b812e4bcb2fe9e1bab51275c78b095e18f3fd1f9 Mon Sep 17 00:00:00 2001 +From afe4989e469f56e64809716aaab3969374071ef8 Mon Sep 17 00:00:00 2001 From: Javier Martinez Canillas Date: Thu, 10 Sep 2020 17:17:57 +0200 Subject: tftp: Roll-over block counter to prevent data packets timeouts @@ -49,7 +49,7 @@ 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/grub-core/net/tftp.c b/grub-core/net/tftp.c -index e6566fa17..33c0b8214 100644 +index e6566fa176..33c0b8214e 100644 --- a/grub-core/net/tftp.c +++ b/grub-core/net/tftp.c @@ -183,11 +183,22 @@ tftp_receive (grub_net_udp_socket_t sock __attribute__ ((unused)), diff -Nru grub2-2.04/debian/patches/ubuntu-add-devicetree-command-support.patch grub2-2.04/debian/patches/ubuntu-add-devicetree-command-support.patch --- grub2-2.04/debian/patches/ubuntu-add-devicetree-command-support.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-add-devicetree-command-support.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 56ec016fe65a634c583cd347fc4e90992cb0c111 Mon Sep 17 00:00:00 2001 +From b99efd29e9b05fc4b2d7961186be315776d08342 Mon Sep 17 00:00:00 2001 From: Dimitri John Ledkov Date: Wed, 22 May 2019 19:57:29 +0100 Subject: Add devicetree command, if a dtb is present. @@ -14,7 +14,7 @@ 1 file changed, 19 insertions(+) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index af1e096bd..bbf5d73e3 100644 +index af1e096bd6..bbf5d73e39 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -254,6 +254,17 @@ EOF diff -Nru grub2-2.04/debian/patches/ubuntu-add-initrd-less-boot-fallback.patch grub2-2.04/debian/patches/ubuntu-add-initrd-less-boot-fallback.patch --- grub2-2.04/debian/patches/ubuntu-add-initrd-less-boot-fallback.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-add-initrd-less-boot-fallback.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 978947c3f5d769ee423c73418783ec4ef8f7ab3b Mon Sep 17 00:00:00 2001 +From f10e58a43fcbcd30760e811d2da0d14d751dbdb7 Mon Sep 17 00:00:00 2001 From: Chris Glass Date: Fri, 9 Mar 2018 13:47:07 +0100 Subject: UBUNTU: Added initrd-less boot capabilities. @@ -12,14 +12,14 @@ --- Makefile.am | 3 ++ configure.ac | 10 ++++++ - grub-initrd-fallback.service | 12 +++++++ + grub-initrd-fallback.service | 13 +++++++ util/grub.d/00_header.in | 27 ++++++++++++++ util/grub.d/10_linux.in | 68 +++++++++++++++++++++++++++--------- - 5 files changed, 104 insertions(+), 16 deletions(-) + 5 files changed, 105 insertions(+), 16 deletions(-) create mode 100644 grub-initrd-fallback.service diff --git a/Makefile.am b/Makefile.am -index 1f4bb9b8c..e6a220711 100644 +index 1f4bb9b8c5..e6a220711e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -473,6 +473,9 @@ ChangeLog: FORCE @@ -33,7 +33,7 @@ syslinux_test: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg diff --git a/configure.ac b/configure.ac -index 883245553..1819188f9 100644 +index 883245553d..1819188f9f 100644 --- a/configure.ac +++ b/configure.ac @@ -305,6 +305,16 @@ AC_SUBST(grubdirname) @@ -55,13 +55,14 @@ # diff --git a/grub-initrd-fallback.service b/grub-initrd-fallback.service new file mode 100644 -index 000000000..48778c9f7 +index 0000000000..fb0b76e193 --- /dev/null +++ b/grub-initrd-fallback.service -@@ -0,0 +1,12 @@ +@@ -0,0 +1,13 @@ +[Unit] +Description=GRUB failed boot detection +After=local-fs.target ++After=grub-common.service + +[Service] +Type=oneshot @@ -72,7 +73,7 @@ +[Install] +WantedBy=multi-user.target rescue.target emergency.target diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in -index b7135b655..2642f66c5 100644 +index b7135b655f..2642f66c59 100644 --- a/util/grub.d/00_header.in +++ b/util/grub.d/00_header.in @@ -50,6 +50,18 @@ if [ -s \$prefix/grubenv ]; then @@ -117,7 +118,7 @@ cat < +Date: Mon, 26 Oct 2020 11:38:34 +0000 +Subject: Ubuntu: add initrd-less-boot informational messages + +Add additional messages when initrd-less boot is attempted or +fails. As otherwise it is not obvious why boot seems to panic and +reboot by default. + +Patch-Name: ubuntu-add-initrd-less-boot-messages.patch +--- + util/grub.d/10_linux.in | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index 49e627228f..47daf51eed 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -160,6 +160,12 @@ if [ "$vt_handoff" = 1 ]; then + fi + + if [ x"$GRUB_FORCE_PARTUUID" != x ]; then ++ gettext_printf "GRUB_FORCE_PARTUUID is set, will attempt initrdless boot\n" >&2 ++ cat << EOF ++# ++# GRUB_FORCE_PARTUUID is set, will attempt initrdless boot ++# Upon panic fallback to booting with initrd ++EOF + echo "set partuuid=${GRUB_FORCE_PARTUUID}" + fi + +@@ -245,6 +251,8 @@ EOF + linux_root_device_thisversion="PARTUUID=${GRUB_FORCE_PARTUUID}" + fi + message="$(gettext_printf "Loading initial ramdisk ...")" ++ initrdlessfail_msg="$(gettext_printf "GRUB_FORCE_PARTUUID set, initrdless boot failed. Attempting with initrd.")" ++ initrdlesstry_msg="$(gettext_printf "GRUB_FORCE_PARTUUID set, attempting initrdless boot.")" + initrd_path= + for i in ${initrd}; do + initrd_path="${initrd_path} ${rel_dirname}/${i}" +@@ -256,6 +264,7 @@ EOF + if test -n "${initrd}" && [ x"$GRUB_FORCE_PARTUUID" != x ]; then + sed "s/^/$submenu_indentation/" << EOF + if [ "\${initrdfail}" = 1 ]; then ++ echo '$(echo "$initrdlessfail_msg" | grub_quote)' + linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} + EOF + if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then +@@ -266,6 +275,7 @@ EOF + sed "s/^/$submenu_indentation/" << EOF + initrd $(echo $initrd_path) + else ++ echo '$(echo "$initrdlesstry_msg" | grub_quote)' + linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} panic=-1 + EOF + if [ -n "$initrd_path_only_early" ]; then diff -Nru grub2-2.04/debian/patches/ubuntu-boot-from-multipath-dependent-symlink.patch grub2-2.04/debian/patches/ubuntu-boot-from-multipath-dependent-symlink.patch --- grub2-2.04/debian/patches/ubuntu-boot-from-multipath-dependent-symlink.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-boot-from-multipath-dependent-symlink.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From c51cc4664ac67fcd7c3177ea6c6dd0d2c06c43e6 Mon Sep 17 00:00:00 2001 +From 66a9669965547561dc84be3887e84307333b5414 Mon Sep 17 00:00:00 2001 From: Michael Hudson-Doyle Date: Tue, 6 Aug 2019 12:31:47 +1200 Subject: UBUNTU: Boot from multipath-dependent symlink when / is multipathed. @@ -16,7 +16,7 @@ 1 file changed, 41 insertions(+) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index bbf5d73e3..14a89ba13 100644 +index bbf5d73e39..14a89ba13d 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -65,6 +65,47 @@ esac diff -Nru grub2-2.04/debian/patches/ubuntu-dejavu-font-path.patch grub2-2.04/debian/patches/ubuntu-dejavu-font-path.patch --- grub2-2.04/debian/patches/ubuntu-dejavu-font-path.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-dejavu-font-path.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From bfa8a4d97cb5452d16e9560a56c34ed5621341ac Mon Sep 17 00:00:00 2001 +From 687d60db13c0ada7390f762bf5b50f1028dd6ed4 Mon Sep 17 00:00:00 2001 From: Dimitri John Ledkov Date: Mon, 14 Sep 2020 10:51:32 +0100 Subject: configure.ac: one more dejavu font search path @@ -11,7 +11,7 @@ 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac -index 6a88b9b0c..fae917102 100644 +index 6a88b9b0c0..fae9171022 100644 --- a/configure.ac +++ b/configure.ac @@ -1671,7 +1671,7 @@ fi diff -Nru grub2-2.04/debian/patches/ubuntu-dont-verify-loopback-images.patch grub2-2.04/debian/patches/ubuntu-dont-verify-loopback-images.patch --- grub2-2.04/debian/patches/ubuntu-dont-verify-loopback-images.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-dont-verify-loopback-images.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 7cb405298d3729d88b4e4ebc46ca1fc9b644bd6b Mon Sep 17 00:00:00 2001 +From 88154250a8b2be9cce677384e0ab71e6ae4284ff Mon Sep 17 00:00:00 2001 From: Chris Coulson Date: Mon, 1 Jun 2020 14:03:37 +0100 Subject: UBUNTU: disk/loopback: Don't verify loopback images @@ -22,7 +22,7 @@ 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/grub-core/disk/loopback.c b/grub-core/disk/loopback.c -index ccb4b167c..210201d22 100644 +index ccb4b167cc..210201d22d 100644 --- a/grub-core/disk/loopback.c +++ b/grub-core/disk/loopback.c @@ -86,7 +86,8 @@ grub_cmd_loopback (grub_extcmd_context_t ctxt, int argc, char **args) diff -Nru grub2-2.04/debian/patches/ubuntu-efi-allow-loopmount-chainload.patch grub2-2.04/debian/patches/ubuntu-efi-allow-loopmount-chainload.patch --- grub2-2.04/debian/patches/ubuntu-efi-allow-loopmount-chainload.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-efi-allow-loopmount-chainload.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From aa08be99df3978b44838e60f571fc965d9d963c4 Mon Sep 17 00:00:00 2001 +From 966e6a4fc0e8958c35bb7e4d843a84f65765b1cc Mon Sep 17 00:00:00 2001 From: Dimitri John Ledkov Date: Wed, 27 Nov 2019 23:12:35 +0000 Subject: UBUNTU: Allow chainloading EFI apps from loop mounts. @@ -15,7 +15,7 @@ create mode 100644 include/grub/loopback.h diff --git a/grub-core/disk/loopback.c b/grub-core/disk/loopback.c -index cdf9123fa..ccb4b167c 100644 +index cdf9123fa5..ccb4b167cc 100644 --- a/grub-core/disk/loopback.c +++ b/grub-core/disk/loopback.c @@ -21,20 +21,13 @@ @@ -41,7 +41,7 @@ static unsigned long last_id = 0; diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c -index ec80f415b..04e815c05 100644 +index ec80f415b8..04e815c052 100644 --- a/grub-core/loader/efi/chainloader.c +++ b/grub-core/loader/efi/chainloader.c @@ -24,6 +24,7 @@ @@ -91,7 +91,7 @@ diff --git a/include/grub/loopback.h b/include/grub/loopback.h new file mode 100644 -index 000000000..3b9a9e32e +index 0000000000..3b9a9e32e8 --- /dev/null +++ b/include/grub/loopback.h @@ -0,0 +1,30 @@ diff -Nru grub2-2.04/debian/patches/ubuntu-efi-console-set-text-mode-as-needed.patch grub2-2.04/debian/patches/ubuntu-efi-console-set-text-mode-as-needed.patch --- grub2-2.04/debian/patches/ubuntu-efi-console-set-text-mode-as-needed.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-efi-console-set-text-mode-as-needed.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From a097dd966d2a0073a3f2f30f868fae351b74fda4 Mon Sep 17 00:00:00 2001 +From 58cecd68933e121f18ce237ac89b41d8e3d39107 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 6 Mar 2018 17:11:15 +0100 Subject: UBUNTU: EFI: Do not set text-mode until we actually need it @@ -15,7 +15,7 @@ 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/grub-core/term/efi/console.c b/grub-core/term/efi/console.c -index 4840cc59d..b61da7d0d 100644 +index 4840cc59d3..b61da7d0d0 100644 --- a/grub-core/term/efi/console.c +++ b/grub-core/term/efi/console.c @@ -24,6 +24,11 @@ diff -Nru grub2-2.04/debian/patches/ubuntu-fix-lzma-decompressor-objcopy.patch grub2-2.04/debian/patches/ubuntu-fix-lzma-decompressor-objcopy.patch --- grub2-2.04/debian/patches/ubuntu-fix-lzma-decompressor-objcopy.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-fix-lzma-decompressor-objcopy.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From a0fdddf679ce3ac17b6de7a5c01c99ab598056ce Mon Sep 17 00:00:00 2001 +From d56617f92ad8f8c9a9620e7e3e67135268ef9fb8 Mon Sep 17 00:00:00 2001 From: Mathieu Trudel-Lapierre Date: Wed, 3 Jul 2019 15:21:16 -0400 Subject: UBUNTU: Have the lzma decompressor image only contain the .text @@ -16,7 +16,7 @@ 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def -index 1731c53f0..33e75021d 100644 +index 1731c53f08..33e75021da 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -547,7 +547,7 @@ image = { diff -Nru grub2-2.04/debian/patches/ubuntu-fix-reproducible-squashfs-test.patch grub2-2.04/debian/patches/ubuntu-fix-reproducible-squashfs-test.patch --- grub2-2.04/debian/patches/ubuntu-fix-reproducible-squashfs-test.patch 1970-01-01 00:00:00.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-fix-reproducible-squashfs-test.patch 2021-02-11 16:22:35.000000000 +0000 @@ -0,0 +1,31 @@ +From 5d9bf25983978951c65a0866b1d82b5a3e8870da Mon Sep 17 00:00:00 2001 +From: Dimitri John Ledkov +Date: Wed, 9 Dec 2020 16:07:10 +0000 +Subject: grub-fs-tester: Add compatibility with reproducible squashfs-tools + 4.4 + +squashfs-tools 4.4 builds reproducible builds by default, when +SOURCE_DATE_EPOCH is set. This is true during package built time for +many Linux distributions. And causes the squashfs test case to fail. + +Patch-Name: ubuntu-fix-reproducible-squashfs-test.patch +Signed-off-by: Dimitri John Ledkov +--- + tests/util/grub-fs-tester.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tests/util/grub-fs-tester.in b/tests/util/grub-fs-tester.in +index bc14a05ca3..26989d58c7 100644 +--- a/tests/util/grub-fs-tester.in ++++ b/tests/util/grub-fs-tester.in +@@ -1048,8 +1048,8 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" "$MAXLOGSECSIZE" 1); do + x"romfs") + genromfs -V "$FSLABEL" -f "${FSIMAGEP}0.img" -d "$MASTER" ;; + xsquash4_*) +- echo mksquashfs "$MASTER" "${FSIMAGEP}0.img" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE +- mksquashfs "$MASTER" "${FSIMAGEP}0.img" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE ;; ++ echo mksquashfs "$MASTER" "${FSIMAGEP}0.img" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE -not-reproducible ++ mksquashfs "$MASTER" "${FSIMAGEP}0.img" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE -not-reproducible ;; + x"bfs") + sleep 1 + fusermount -u "$MNTPOINTRW" diff -Nru grub2-2.04/debian/patches/ubuntu-fixup-rhboot-f34-support-non-ethernet-2.patch grub2-2.04/debian/patches/ubuntu-fixup-rhboot-f34-support-non-ethernet-2.patch --- grub2-2.04/debian/patches/ubuntu-fixup-rhboot-f34-support-non-ethernet-2.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-fixup-rhboot-f34-support-non-ethernet-2.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From a6a661184428ee135b0ca3dac5509749e709ae9b Mon Sep 17 00:00:00 2001 +From d987be599af27505aebeb9061337c5473b73bb63 Mon Sep 17 00:00:00 2001 From: Dimitri John Ledkov Date: Sat, 12 Dec 2020 00:21:15 +0000 Subject: UBUNTU: fixup unaligned access. @@ -10,14 +10,12 @@ Fixes: rhboot-f34-support-non-ethernet.patch Patch-Name: ubuntu-fixup-rhboot-f34-support-non-ethernet-2.patch -(cherry picked from commit 72cff34035e5ba35d01fc6cbc00f3b9b135ff5a6) -(cherry picked from commit 3d01aa9b53621af0ea404b8738f20d0fb3d477f8) --- grub-core/net/ethernet.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/grub-core/net/ethernet.c b/grub-core/net/ethernet.c -index 9aae83a5e..01cd21785 100644 +index 9aae83a5eb..01cd21785a 100644 --- a/grub-core/net/ethernet.c +++ b/grub-core/net/ethernet.c @@ -74,12 +74,12 @@ send_ethernet_packet (struct grub_net_network_level_interface *inf, diff -Nru grub2-2.04/debian/patches/ubuntu-fixup-rhboot-f34-support-non-ethernet.patch grub2-2.04/debian/patches/ubuntu-fixup-rhboot-f34-support-non-ethernet.patch --- grub2-2.04/debian/patches/ubuntu-fixup-rhboot-f34-support-non-ethernet.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-fixup-rhboot-f34-support-non-ethernet.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From fd5ee46944732bdd208db84879dce56b8d3fca09 Mon Sep 17 00:00:00 2001 +From d2a38d1b590cdc19790fd223faeb6e60761c247b Mon Sep 17 00:00:00 2001 From: Dimitri John Ledkov Date: Thu, 10 Dec 2020 13:42:13 +0000 Subject: UBUNTU: fixup ofnet initialization. @@ -6,14 +6,12 @@ Signed-off-by: Dimitri John Ledkov Patch-Name: ubuntu-fixup-rhboot-f34-support-non-ethernet.patch -(cherry picked from commit a819547bd60ba1c6088977b7bfe288f4f867fad9) -(cherry picked from commit 40942d76840add267793234a3124fe1301feae55) --- grub-core/net/drivers/ieee1275/ofnet.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grub-core/net/drivers/ieee1275/ofnet.c b/grub-core/net/drivers/ieee1275/ofnet.c -index 057ba8597..4621b0a34 100644 +index 057ba85973..4621b0a346 100644 --- a/grub-core/net/drivers/ieee1275/ofnet.c +++ b/grub-core/net/drivers/ieee1275/ofnet.c @@ -154,7 +154,7 @@ grub_ieee1275_parse_bootpath (const char *devpath, char *bootpath, diff -Nru grub2-2.04/debian/patches/ubuntu-flavour-order.patch grub2-2.04/debian/patches/ubuntu-flavour-order.patch --- grub2-2.04/debian/patches/ubuntu-flavour-order.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-flavour-order.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 8f4642af583c253259e8ca40d8aff776976d8d5d Mon Sep 17 00:00:00 2001 +From 05a261de1cb80b281e28b396c878544318873fc9 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 9 Jun 2020 11:50:23 +0200 Subject: UBUNTU: Add GRUB_FLAVOUR_ORDER configuration item @@ -20,7 +20,7 @@ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in -index 72f1e25a0..6c8988fd6 100644 +index 72f1e25a03..6c8988fd60 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -260,7 +260,8 @@ export GRUB_DEFAULT \ @@ -34,7 +34,7 @@ if test "x${grub_cfg}" != "x"; then rm -f "${grub_cfg}.new" diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in -index fe6319abe..7e2d1bc21 100644 +index fe6319abe0..7e2d1bc214 100644 --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in @@ -270,6 +270,21 @@ version_test_gt () diff -Nru grub2-2.04/debian/patches/ubuntu-grub-install-extra-removable.patch grub2-2.04/debian/patches/ubuntu-grub-install-extra-removable.patch --- grub2-2.04/debian/patches/ubuntu-grub-install-extra-removable.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-grub-install-extra-removable.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 42b10df3ba7aff3f58b32cd43a0075a677fa8143 Mon Sep 17 00:00:00 2001 +From dbba4f41f9174a940d244a05747ee9f7a763529f Mon Sep 17 00:00:00 2001 From: Steve McIntyre <93sam@debian.org> Date: Wed, 3 Dec 2014 01:25:12 +0000 Subject: UBUNTU: Add support for forcing EFI installation to the removable @@ -23,7 +23,7 @@ 1 file changed, 133 insertions(+), 2 deletions(-) diff --git a/util/grub-install.c b/util/grub-install.c -index 64c292383..030464645 100644 +index 64c292383f..0304646453 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -56,6 +56,7 @@ diff -Nru grub2-2.04/debian/patches/ubuntu-install-signed.patch grub2-2.04/debian/patches/ubuntu-install-signed.patch --- grub2-2.04/debian/patches/ubuntu-install-signed.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-install-signed.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From e1cc8a0711a700332db770c6e741d60ca2f9cce8 Mon Sep 17 00:00:00 2001 +From 41c4a8682102b8a85611fd83ac806fd79291cce2 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:22 +0000 Subject: UBUNTU: Install signed images if UEFI Secure Boot is enabled @@ -19,7 +19,7 @@ 1 file changed, 156 insertions(+), 59 deletions(-) diff --git a/util/grub-install.c b/util/grub-install.c -index 3b4606eef..e1e40cf2b 100644 +index 3b4606eef1..e1e40cf2b5 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -80,6 +80,7 @@ static char *label_color; diff -Nru grub2-2.04/debian/patches/ubuntu-linuxefi-arm64.patch grub2-2.04/debian/patches/ubuntu-linuxefi-arm64.patch --- grub2-2.04/debian/patches/ubuntu-linuxefi-arm64.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-linuxefi-arm64.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 837f7129a8ae509c955024b47303f058e41ee7f8 Mon Sep 17 00:00:00 2001 +From 15eace61a4052ef3b74be66f1233c8a59c1ea004 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Fri, 11 Sep 2020 11:28:08 +0200 Subject: Cherry-pick back parts of "Load arm with SB enabled." @@ -17,7 +17,7 @@ 1 file changed, 56 insertions(+), 50 deletions(-) diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c -index 3f5496fc5..130e9c09b 100644 +index 3f5496fc55..130e9c09b4 100644 --- a/grub-core/loader/arm64/linux.c +++ b/grub-core/loader/arm64/linux.c @@ -43,6 +43,8 @@ static int loaded; diff -Nru grub2-2.04/debian/patches/ubuntu-linuxefi-arm64-set-base-addr.patch grub2-2.04/debian/patches/ubuntu-linuxefi-arm64-set-base-addr.patch --- grub2-2.04/debian/patches/ubuntu-linuxefi-arm64-set-base-addr.patch 2021-01-14 12:27:39.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-linuxefi-arm64-set-base-addr.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 9431ec5c6ebbf207f8b0a5497c754020a1fc5a90 Mon Sep 17 00:00:00 2001 +From cffdb0767a7b93177fc240c4ac6accf352e48a06 Mon Sep 17 00:00:00 2001 From: Javier Martinez Canillas Date: Thu, 23 Apr 2020 15:06:46 +0200 Subject: efi: Set image base address before jumping to the PE/COFF entry point @@ -34,7 +34,7 @@ 1 file changed, 15 insertions(+) diff --git a/grub-core/loader/efi/linux.c b/grub-core/loader/efi/linux.c -index f6d30bcf7..a09479cd6 100644 +index f6d30bcf7c..a09479cd6d 100644 --- a/grub-core/loader/efi/linux.c +++ b/grub-core/loader/efi/linux.c @@ -72,6 +72,7 @@ grub_err_t diff -Nru grub2-2.04/debian/patches/ubuntu-linuxefi.patch grub2-2.04/debian/patches/ubuntu-linuxefi.patch --- grub2-2.04/debian/patches/ubuntu-linuxefi.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-linuxefi.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 5d037853169fac31b3c0cfe7a6b6c4eb267879d3 Mon Sep 17 00:00:00 2001 +From e1dd0389486d0aaabd6b03c5bfa20da52c41158e Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Wed, 27 Feb 2019 12:20:48 -0500 Subject: UBUNTU: Add support for linuxefi @@ -358,7 +358,7 @@ create mode 100644 include/grub/sparc64/linux.h diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am -index 3ea8e7ff4..c6ba5b2d7 100644 +index 3ea8e7ff45..c6ba5b2d76 100644 --- a/grub-core/Makefile.am +++ b/grub-core/Makefile.am @@ -71,6 +71,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/command.h @@ -370,7 +370,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env_private.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/err.h diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def -index aadb4cdff..1731c53f0 100644 +index aadb4cdff8..1731c53f08 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -207,6 +207,7 @@ kernel = { @@ -428,7 +428,7 @@ enable = i386_coreboot; enable = efi; diff --git a/grub-core/commands/iorw.c b/grub-core/commands/iorw.c -index a0c164e54..41a7f3f04 100644 +index a0c164e54f..41a7f3f046 100644 --- a/grub-core/commands/iorw.c +++ b/grub-core/commands/iorw.c @@ -23,6 +23,7 @@ @@ -460,7 +460,7 @@ grub_unregister_extcmd (cmd_read_word); grub_unregister_extcmd (cmd_read_dword); diff --git a/grub-core/commands/memrw.c b/grub-core/commands/memrw.c -index 98769eadb..088cbe9e2 100644 +index 98769eadb3..088cbe9e2b 100644 --- a/grub-core/commands/memrw.c +++ b/grub-core/commands/memrw.c @@ -22,6 +22,7 @@ @@ -492,7 +492,7 @@ grub_unregister_extcmd (cmd_read_word); grub_unregister_extcmd (cmd_read_dword); diff --git a/grub-core/kern/arm/coreboot/coreboot.S b/grub-core/kern/arm/coreboot/coreboot.S -index a1104526c..70998c066 100644 +index a1104526c1..70998c066a 100644 --- a/grub-core/kern/arm/coreboot/coreboot.S +++ b/grub-core/kern/arm/coreboot/coreboot.S @@ -42,3 +42,9 @@ FUNCTION(grub_armv7_get_timer_frequency) @@ -506,7 +506,7 @@ + void *kernel_param); + diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c -index 074dfc3c6..d665c10fc 100644 +index 074dfc3c6f..d665c10fcc 100644 --- a/grub-core/kern/dl.c +++ b/grub-core/kern/dl.c @@ -32,6 +32,7 @@ @@ -518,7 +518,7 @@ /* Platforms where modules are in a readonly area of memory. */ #if defined(GRUB_MACHINE_QEMU) diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c -index 96204e39b..6e1ceb905 100644 +index 96204e39b9..6e1ceb9051 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -273,34 +273,6 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, @@ -557,7 +557,7 @@ /* Search the mods section from the PE32/PE32+ image. This code uses diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c -index b02fab1b1..a9e37108c 100644 +index b02fab1b10..a9e37108c6 100644 --- a/grub-core/kern/efi/mm.c +++ b/grub-core/kern/efi/mm.c @@ -113,6 +113,38 @@ grub_efi_drop_alloc (grub_efi_physical_address_t address, @@ -601,7 +601,7 @@ grub_efi_allocate_pages_real (grub_efi_physical_address_t address, diff --git a/grub-core/kern/efi/sb.c b/grub-core/kern/efi/sb.c new file mode 100644 -index 000000000..c14f401d7 +index 0000000000..c14f401d7e --- /dev/null +++ b/grub-core/kern/efi/sb.c @@ -0,0 +1,66 @@ @@ -672,7 +672,7 @@ +#endif +} diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c -index ef3e9f944..1a5296a60 100644 +index ef3e9f9444..1a5296a60c 100644 --- a/grub-core/loader/arm64/linux.c +++ b/grub-core/loader/arm64/linux.c @@ -27,6 +27,7 @@ @@ -720,7 +720,7 @@ linux_args = grub_malloc (cmdline_size); if (!linux_args) diff --git a/grub-core/loader/efi/appleloader.c b/grub-core/loader/efi/appleloader.c -index 74888c463..69c2a10d3 100644 +index 74888c463b..69c2a10d35 100644 --- a/grub-core/loader/efi/appleloader.c +++ b/grub-core/loader/efi/appleloader.c @@ -24,6 +24,7 @@ @@ -751,7 +751,7 @@ grub_unregister_command (cmd); } diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c -index cd92ea3f2..ec80f415b 100644 +index cd92ea3f24..ec80f415b8 100644 --- a/grub-core/loader/efi/chainloader.c +++ b/grub-core/loader/efi/chainloader.c @@ -32,6 +32,9 @@ @@ -1701,7 +1701,7 @@ return grub_errno; diff --git a/grub-core/loader/efi/fdt.c b/grub-core/loader/efi/fdt.c -index f0c2d91be..5360e6c1f 100644 +index f0c2d91be2..5360e6c1f7 100644 --- a/grub-core/loader/efi/fdt.c +++ b/grub-core/loader/efi/fdt.c @@ -25,6 +25,7 @@ @@ -1714,7 +1714,7 @@ static void *fdt; diff --git a/grub-core/loader/efi/linux.c b/grub-core/loader/efi/linux.c new file mode 100644 -index 000000000..e372b26a1 +index 0000000000..e372b26a1b --- /dev/null +++ b/grub-core/loader/efi/linux.c @@ -0,0 +1,86 @@ @@ -1805,7 +1805,7 @@ + return GRUB_ERR_BUG; +} diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c -index 3730ed382..5b9b92d6b 100644 +index 3730ed3824..5b9b92d6ba 100644 --- a/grub-core/loader/i386/bsd.c +++ b/grub-core/loader/i386/bsd.c @@ -39,6 +39,7 @@ @@ -1838,7 +1838,7 @@ grub_unregister_extcmd (cmd_netbsd); diff --git a/grub-core/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c new file mode 100644 -index 000000000..6b6aef87f +index 0000000000..6b6aef87f7 --- /dev/null +++ b/grub-core/loader/i386/efi/linux.c @@ -0,0 +1,379 @@ @@ -2222,7 +2222,7 @@ + grub_unregister_command (cmd_initrd); +} diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c -index d0501e229..4328bcbdb 100644 +index d0501e2295..4328bcbdb0 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -45,6 +45,7 @@ GRUB_MOD_LICENSE ("GPLv3+"); @@ -2390,7 +2390,7 @@ { grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); diff --git a/grub-core/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c -index 47ea2945e..3866f048b 100644 +index 47ea2945e4..3866f048bb 100644 --- a/grub-core/loader/i386/pc/linux.c +++ b/grub-core/loader/i386/pc/linux.c @@ -35,6 +35,7 @@ @@ -2503,7 +2503,7 @@ grub_unregister_command (cmd_initrd); } diff --git a/grub-core/loader/multiboot.c b/grub-core/loader/multiboot.c -index 4a98d7082..3e6ad166d 100644 +index 4a98d70825..3e6ad166dc 100644 --- a/grub-core/loader/multiboot.c +++ b/grub-core/loader/multiboot.c @@ -50,6 +50,7 @@ @@ -2535,7 +2535,7 @@ grub_unregister_command (cmd_module); } diff --git a/grub-core/loader/xnu.c b/grub-core/loader/xnu.c -index 7f74d1d6f..e0f47e72b 100644 +index 7f74d1d6fc..e0f47e72b0 100644 --- a/grub-core/loader/xnu.c +++ b/grub-core/loader/xnu.c @@ -34,6 +34,7 @@ @@ -2567,7 +2567,7 @@ grub_unregister_command (cmd_resume); #endif diff --git a/include/grub/arm64/linux.h b/include/grub/arm64/linux.h -index 4269adc6d..cc8174ccd 100644 +index 4269adc6da..cc8174ccdf 100644 --- a/include/grub/arm64/linux.h +++ b/include/grub/arm64/linux.h @@ -20,6 +20,8 @@ @@ -2580,7 +2580,7 @@ /* From linux/Documentation/arm64/booting.txt */ struct linux_arm64_kernel_header diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h -index a237952b3..5b6387581 100644 +index a237952b37..5b63875812 100644 --- a/include/grub/efi/efi.h +++ b/include/grub/efi/efi.h @@ -47,6 +47,9 @@ EXPORT_FUNC(grub_efi_allocate_fixed) (grub_efi_physical_address_t address, @@ -2603,7 +2603,7 @@ const grub_efi_device_path_t *dp2); diff --git a/include/grub/efi/linux.h b/include/grub/efi/linux.h new file mode 100644 -index 000000000..0033d9305 +index 0000000000..0033d9305a --- /dev/null +++ b/include/grub/efi/linux.h @@ -0,0 +1,31 @@ @@ -2639,7 +2639,7 @@ + +#endif /* ! GRUB_EFI_LINUX_HEADER */ diff --git a/include/grub/efi/pe32.h b/include/grub/efi/pe32.h -index 0ed8781f0..a43adf274 100644 +index 0ed8781f03..a43adf2746 100644 --- a/include/grub/efi/pe32.h +++ b/include/grub/efi/pe32.h @@ -223,7 +223,11 @@ struct grub_pe64_optional_header @@ -2730,7 +2730,7 @@ grub_uint32_t page_rva; diff --git a/include/grub/efi/sb.h b/include/grub/efi/sb.h new file mode 100644 -index 000000000..9629fbb0f +index 0000000000..9629fbb0f9 --- /dev/null +++ b/include/grub/efi/sb.h @@ -0,0 +1,29 @@ @@ -2764,7 +2764,7 @@ + +#endif /* ! GRUB_EFI_SB_HEADER */ diff --git a/include/grub/i386/linux.h b/include/grub/i386/linux.h -index ce30e7fb0..a093679cb 100644 +index ce30e7fb01..a093679cb8 100644 --- a/include/grub/i386/linux.h +++ b/include/grub/i386/linux.h @@ -136,7 +136,12 @@ struct linux_i386_kernel_header @@ -2783,13 +2783,13 @@ grub_uint64_t hardware_subarch_data; diff --git a/include/grub/ia64/linux.h b/include/grub/ia64/linux.h new file mode 100644 -index 000000000..e69de29bb +index 0000000000..e69de29bb2 diff --git a/include/grub/mips/linux.h b/include/grub/mips/linux.h new file mode 100644 -index 000000000..e69de29bb +index 0000000000..e69de29bb2 diff --git a/include/grub/powerpc/linux.h b/include/grub/powerpc/linux.h new file mode 100644 -index 000000000..e69de29bb +index 0000000000..e69de29bb2 diff --git a/include/grub/sparc64/linux.h b/include/grub/sparc64/linux.h new file mode 100644 -index 000000000..e69de29bb +index 0000000000..e69de29bb2 diff -Nru grub2-2.04/debian/patches/ubuntu-mkconfig-leave-breadcrumbs.patch grub2-2.04/debian/patches/ubuntu-mkconfig-leave-breadcrumbs.patch --- grub2-2.04/debian/patches/ubuntu-mkconfig-leave-breadcrumbs.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-mkconfig-leave-breadcrumbs.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 52a152744b026f62a412ae10d17f3756c44a687f Mon Sep 17 00:00:00 2001 +From 9fae8339aedc5eaed8924eea0fa2154073078f43 Mon Sep 17 00:00:00 2001 From: Mathieu Trudel-Lapierre Date: Fri, 14 Dec 2018 13:46:14 -0500 Subject: UBUNTU: grub-mkconfig: leave a trace of what files were sourced to @@ -11,7 +11,7 @@ 1 file changed, 2 insertions(+) diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in -index 29bdad0c1..72f1e25a0 100644 +index 29bdad0c12..72f1e25a03 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -162,10 +162,12 @@ if [ "x${GRUB_EARLY_INITRD_LINUX_STOCK}" = "x" ]; then diff -Nru grub2-2.04/debian/patches/ubuntu-recovery-dis_ucode_ldr.patch grub2-2.04/debian/patches/ubuntu-recovery-dis_ucode_ldr.patch --- grub2-2.04/debian/patches/ubuntu-recovery-dis_ucode_ldr.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-recovery-dis_ucode_ldr.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 398371c71cd52b6c48fa1d888903bd8a85682ec0 Mon Sep 17 00:00:00 2001 +From 70ba6b38a813b78f81f9298f4fe9964b9c347909 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Fri, 19 Jun 2020 12:57:19 +0200 Subject: Pass dis_ucode_ldr to kernel for recovery mode @@ -19,7 +19,7 @@ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index 14a89ba13..49e627228 100644 +index 14a89ba13d..49e627228f 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -334,6 +334,10 @@ case "$machine" in @@ -34,7 +34,7 @@ prepare_root_cache= boot_device_id= diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index 712d83280..d9b79e29a 100755 +index 8c2e7e5c15..cc4f6bd777 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in @@ -41,6 +41,16 @@ imported_pools="" @@ -69,8 +69,8 @@ - initrd_list="" kernel_list="" - list=$(find "${boot_dir}" -maxdepth 1 -type f -regex '.*/\(vmlinuz\|vmlinux\|kernel\)-.*') -@@ -907,6 +908,11 @@ generate_grub_menu() { + candidate_kernel_list="$(find "${boot_dir}" -maxdepth 1 -type f -regex '.*/\(vmlinuz\|vmlinux\|kernel\)-.*')" +@@ -924,6 +925,11 @@ generate_grub_menu() { GRUB_CMDLINE_LINUX_RECOVERY="${GRUB_CMDLINE_LINUX_RECOVERY} nomodeset" fi diff -Nru grub2-2.04/debian/patches/ubuntu-resilient-boot-boot-order.patch grub2-2.04/debian/patches/ubuntu-resilient-boot-boot-order.patch --- grub2-2.04/debian/patches/ubuntu-resilient-boot-boot-order.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-resilient-boot-boot-order.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 7c39c2d340193862f27a1ef0af21653bc95b98b1 Mon Sep 17 00:00:00 2001 +From dd8990b4b71cc9bf0200086fe8d1cfc9fa9553f0 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Wed, 8 Apr 2020 11:05:25 +0200 Subject: UBUNTU: efivar: Correctly handle boot order of multiple ESPs @@ -30,7 +30,7 @@ 6 files changed, 59 insertions(+), 24 deletions(-) diff --git a/grub-core/osdep/basic/no_platform.c b/grub-core/osdep/basic/no_platform.c -index d76c34c14..152a32873 100644 +index d76c34c148..152a328737 100644 --- a/grub-core/osdep/basic/no_platform.c +++ b/grub-core/osdep/basic/no_platform.c @@ -31,7 +31,7 @@ grub_install_register_ieee1275 (int is_prep, const char *install_device, @@ -43,7 +43,7 @@ const char *efi_distributor) { diff --git a/grub-core/osdep/unix/efivar.c b/grub-core/osdep/unix/efivar.c -index 41d39c448..d34df0f70 100644 +index 41d39c4489..d34df0f70f 100644 --- a/grub-core/osdep/unix/efivar.c +++ b/grub-core/osdep/unix/efivar.c @@ -266,9 +266,10 @@ remove_from_boot_order (struct efi_variable *order, uint16_t num) @@ -142,7 +142,7 @@ grub_util_info ("setting EFI variable BootOrder"); rc = set_efi_variable ("BootOrder", order); diff --git a/grub-core/osdep/unix/platform.c b/grub-core/osdep/unix/platform.c -index b561174ea..a5267db68 100644 +index b561174ea9..a5267db68d 100644 --- a/grub-core/osdep/unix/platform.c +++ b/grub-core/osdep/unix/platform.c @@ -76,13 +76,13 @@ get_ofpathname (const char *dev) @@ -163,7 +163,7 @@ grub_util_error ("%s", _("GRUB was not built with efivar support; " diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c -index e19a3d9a8..a3f738fb9 100644 +index e19a3d9a8a..a3f738fb9b 100644 --- a/grub-core/osdep/windows/platform.c +++ b/grub-core/osdep/windows/platform.c @@ -208,7 +208,7 @@ set_efi_variable_bootn (grub_uint16_t n, void *in, grub_size_t len) @@ -176,7 +176,7 @@ const char *efi_distributor) { diff --git a/include/grub/util/install.h b/include/grub/util/install.h -index a521f1663..b2ed88e38 100644 +index a521f1663f..b2ed88e386 100644 --- a/include/grub/util/install.h +++ b/include/grub/util/install.h @@ -219,15 +219,14 @@ grub_install_get_default_x86_platform (void); @@ -204,7 +204,7 @@ void grub_install_register_ieee1275 (int is_prep, const char *install_device, diff --git a/util/grub-install.c b/util/grub-install.c -index bf8eb65b3..f408b1986 100644 +index bf8eb65b33..f408b19860 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -2083,9 +2083,9 @@ main (int argc, char *argv[]) diff -Nru grub2-2.04/debian/patches/ubuntu-resilient-boot-ignore-alternative-esps.patch grub2-2.04/debian/patches/ubuntu-resilient-boot-ignore-alternative-esps.patch --- grub2-2.04/debian/patches/ubuntu-resilient-boot-ignore-alternative-esps.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-resilient-boot-ignore-alternative-esps.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From b203098a49ebf172699dbb05b0cf88b2496dbdf7 Mon Sep 17 00:00:00 2001 +From ec12df445038edc4057bad5f6e5a91720f37968c Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Fri, 3 Apr 2020 13:43:49 +0200 Subject: UBUNTU: efivar: Ignore alternative ESPs @@ -13,7 +13,7 @@ 1 file changed, 125 insertions(+), 5 deletions(-) diff --git a/grub-core/osdep/unix/efivar.c b/grub-core/osdep/unix/efivar.c -index 4a58328b4..41d39c448 100644 +index 4a58328b42..41d39c4489 100644 --- a/grub-core/osdep/unix/efivar.c +++ b/grub-core/osdep/unix/efivar.c @@ -37,9 +37,11 @@ diff -Nru grub2-2.04/debian/patches/ubuntu-shorter-version-info.patch grub2-2.04/debian/patches/ubuntu-shorter-version-info.patch --- grub2-2.04/debian/patches/ubuntu-shorter-version-info.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-shorter-version-info.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 05aa4e9758b7afb0866081795e1d7c139861ac97 Mon Sep 17 00:00:00 2001 +From 82738b68e49fd5411310e9cea8386658582c9204 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Thu, 8 Feb 2018 10:48:37 +0100 Subject: UBUNTU: Show only upstream version, hide rest in package_version @@ -17,7 +17,7 @@ 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c -index 0aa389fa1..d25a8212c 100644 +index 0aa389fa16..d25a8212c7 100644 --- a/grub-core/normal/main.c +++ b/grub-core/normal/main.c @@ -208,7 +208,7 @@ grub_normal_init_page (struct grub_term_output *term, diff -Nru grub2-2.04/debian/patches/ubuntu-skip-disk-by-id-lvm-pvm-uuid-entries.patch grub2-2.04/debian/patches/ubuntu-skip-disk-by-id-lvm-pvm-uuid-entries.patch --- grub2-2.04/debian/patches/ubuntu-skip-disk-by-id-lvm-pvm-uuid-entries.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-skip-disk-by-id-lvm-pvm-uuid-entries.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 48b735b222f112b8a9010ec2dbbf26818f8a1bf3 Mon Sep 17 00:00:00 2001 +From a9b8086566d370f10a16cd24193abaf9ab7af175 Mon Sep 17 00:00:00 2001 From: Rafael David Tinoco Date: Mon, 7 Oct 2019 22:53:32 -0300 Subject: Skip /dev/disk/by-id/lvm-pvm-uuid entries from device iteration @@ -44,7 +44,7 @@ 1 file changed, 3 insertions(+) diff --git a/util/deviceiter.c b/util/deviceiter.c -index dddc50da7..ec9a6d0ab 100644 +index dddc50da7a..ec9a6d0ab4 100644 --- a/util/deviceiter.c +++ b/util/deviceiter.c @@ -589,6 +589,9 @@ grub_util_iterate_devices (int (*hook) (const char *, int, void *), void *hook_d diff -Nru grub2-2.04/debian/patches/ubuntu-speed-zsys-history.patch grub2-2.04/debian/patches/ubuntu-speed-zsys-history.patch --- grub2-2.04/debian/patches/ubuntu-speed-zsys-history.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-speed-zsys-history.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 9b0c52034a7de1c8749706ceef878b72f04ed115 Mon Sep 17 00:00:00 2001 +From 55104d5764c31ec9b716dfbbae5dc10091e2ee60 Mon Sep 17 00:00:00 2001 From: Didier Roche Date: Mon, 13 Apr 2020 15:12:21 +0200 Subject: UBUNTU: Improve performance in bootmenu for zsys @@ -17,10 +17,10 @@ 1 file changed, 56 insertions(+), 21 deletions(-) diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index 4c48abef0..712d83280 100755 +index 735b46af65..8c2e7e5c15 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in -@@ -803,9 +803,10 @@ zfs_linux_entry () { +@@ -819,9 +819,10 @@ zfs_linux_entry () { boot_device="$5" initrd="$6" kernel="$7" @@ -33,7 +33,7 @@ submenu_indentation="$(printf %${submenu_level}s | tr " " "${grub_tab}")" echo "${submenu_indentation}menuentry '$(echo "${title}" | grub_quote)' ${CLASS} \${menuentry_id_option} 'gnulinux-${dataset}-${kernel_version}' {" -@@ -840,7 +841,15 @@ zfs_linux_entry () { +@@ -856,7 +857,15 @@ zfs_linux_entry () { echo "${submenu_indentation} insmod gzio" echo "${submenu_indentation} if [ \"\${grub_platform}\" = xen ]; then insmod xzio; insmod lzopio; fi" @@ -50,7 +50,7 @@ if [ "${quiet_boot}" = 0 ] || [ "${type}" != simple ]; then echo "${submenu_indentation} echo $(gettext_printf "Loading Linux %s ..." ${kernel_version} | grub_quote)" -@@ -908,6 +917,40 @@ generate_grub_menu() { +@@ -925,6 +934,40 @@ generate_grub_menu() { print_menu_prologue @@ -91,7 +91,7 @@ # IFS is set to TAB (ASCII 0x09) echo "${menu_metadata}" | { -@@ -938,7 +981,8 @@ generate_grub_menu() { +@@ -955,7 +998,8 @@ generate_grub_menu() { main_dataset_name="${name}" main_dataset="${dataset}" @@ -101,7 +101,7 @@ at_least_one_entry=1 ;; advanced) -@@ -954,12 +998,12 @@ generate_grub_menu() { +@@ -971,12 +1015,12 @@ generate_grub_menu() { kernel_version=$(basename "${kernel}" | sed -e "s,^[^0-9]*-,,g") title="$(gettext_printf "%s%s, with Linux %s" "${last_booted_kernel_marker}" "${name}" "${kernel_version}")" @@ -116,7 +116,7 @@ fi at_least_one_entry=1 ;; -@@ -977,33 +1021,24 @@ generate_grub_menu() { +@@ -994,33 +1038,24 @@ generate_grub_menu() { fi echo " submenu '${title}' \${menuentry_id_option} 'gnulinux-history-${dataset}' {" diff -Nru grub2-2.04/debian/patches/ubuntu-support-initrd-less-boot.patch grub2-2.04/debian/patches/ubuntu-support-initrd-less-boot.patch --- grub2-2.04/debian/patches/ubuntu-support-initrd-less-boot.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-support-initrd-less-boot.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From bb9446cdc0550348631a98c1e2dde61a4f84b624 Mon Sep 17 00:00:00 2001 +From 2816e37502bd6089455a44ee8f74215a596f79b6 Mon Sep 17 00:00:00 2001 From: Chris Glass Date: Thu, 10 Nov 2016 13:44:25 -0500 Subject: UBUNTU: Added knobs to allow non-initrd boot config @@ -18,7 +18,7 @@ 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/docs/grub.info b/docs/grub.info -index 7cc7d9212..f804b7800 100644 +index 7cc7d92128..f804b7800e 100644 --- a/docs/grub.info +++ b/docs/grub.info @@ -1436,6 +1436,19 @@ it must be quoted. For example: @@ -42,7 +42,7 @@ existing configurations, but have better replacements: diff --git a/docs/grub.texi b/docs/grub.texi -index 3ec35d315..1baa0fa20 100644 +index 3ec35d315a..1baa0fa20f 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -1541,6 +1541,19 @@ This option sets the English text of the string that will be displayed in @@ -66,7 +66,7 @@ The following options are still accepted for compatibility with existing diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in -index 9c1da6477..29bdad0c1 100644 +index 9c1da64771..29bdad0c12 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -256,7 +256,9 @@ export GRUB_DEFAULT \ @@ -81,7 +81,7 @@ if test "x${grub_cfg}" != "x"; then rm -f "${grub_cfg}.new" diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index dff84edea..aa9666e5a 100644 +index dff84edea5..aa9666e5ad 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -193,11 +193,17 @@ EOF diff -Nru grub2-2.04/debian/patches/ubuntu-temp-keep-auto-nvram.patch grub2-2.04/debian/patches/ubuntu-temp-keep-auto-nvram.patch --- grub2-2.04/debian/patches/ubuntu-temp-keep-auto-nvram.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-temp-keep-auto-nvram.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 5117bda061113e9a009bc1bb7cadd2a0f22c5efd Mon Sep 17 00:00:00 2001 +From 9f6e3038ec2cdcc467da80f1f2c925693ca7478a Mon Sep 17 00:00:00 2001 From: Mathieu Trudel-Lapierre Date: Tue, 16 Jul 2019 09:52:10 -0400 Subject: UBUNTU: Temporarily keep grub-install's --auto-nvram. @@ -10,7 +10,7 @@ 1 file changed, 3 insertions(+) diff --git a/util/grub-install.c b/util/grub-install.c -index 63462e4e0..bf8eb65b3 100644 +index 63462e4e09..bf8eb65b33 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -98,6 +98,7 @@ enum diff -Nru grub2-2.04/debian/patches/ubuntu-tpm-unknown-error-non-fatal.patch grub2-2.04/debian/patches/ubuntu-tpm-unknown-error-non-fatal.patch --- grub2-2.04/debian/patches/ubuntu-tpm-unknown-error-non-fatal.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-tpm-unknown-error-non-fatal.patch 2021-02-11 16:22:35.000000000 +0000 @@ -1,4 +1,4 @@ -From 737eccc3c87fffcdd951520d77178c851adb5402 Mon Sep 17 00:00:00 2001 +From 4c71f1e9171558b72b78ed45d63a0d8a19b6e1fb Mon Sep 17 00:00:00 2001 From: Mathieu Trudel-Lapierre Date: Fri, 25 Oct 2019 10:25:04 -0400 Subject: tpm: Pass unknown error as non-fatal, but debug print the error we @@ -11,7 +11,7 @@ 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/grub-core/commands/efi/tpm.c b/grub-core/commands/efi/tpm.c -index 32909c192..fdbaaee19 100644 +index 32909c192f..fdbaaee195 100644 --- a/grub-core/commands/efi/tpm.c +++ b/grub-core/commands/efi/tpm.c @@ -155,7 +155,8 @@ grub_tpm1_execute (grub_efi_handle_t tpm_handle, diff -Nru grub2-2.04/debian/patches/ubuntu-zfs-enhance-support.patch grub2-2.04/debian/patches/ubuntu-zfs-enhance-support.patch --- grub2-2.04/debian/patches/ubuntu-zfs-enhance-support.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/ubuntu-zfs-enhance-support.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From bdc1aad90a89af51e043f5bf9dc84019ad2cb75b Mon Sep 17 00:00:00 2001 +From 475bed83826673e9bcaf68de4e818b57bdd66959 Mon Sep 17 00:00:00 2001 From: Didier Roche Date: Fri, 12 Jul 2019 11:06:06 -0400 Subject: UBUNTU: Enhance ZFS grub support @@ -22,12 +22,12 @@ --- Makefile.util.def | 7 + util/grub.d/10_linux.in | 4 + - util/grub.d/10_linux_zfs.in | 964 ++++++++++++++++++++++++++++++++++++ - 3 files changed, 975 insertions(+) + util/grub.d/10_linux_zfs.in | 981 ++++++++++++++++++++++++++++++++++++ + 3 files changed, 992 insertions(+) create mode 100755 util/grub.d/10_linux_zfs.in diff --git a/Makefile.util.def b/Makefile.util.def -index 969d32f00..bac85e284 100644 +index 969d32f009..bac85e2840 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -482,6 +482,13 @@ script = { @@ -45,7 +45,7 @@ name = '10_xnu'; common = util/grub.d/10_xnu.in; diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index 4532266be..a75096609 100644 +index 4532266be6..a75096609a 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -71,6 +71,10 @@ case x"$GRUB_FS" in @@ -61,10 +61,10 @@ LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs%/}" diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in new file mode 100755 -index 000000000..5ec65fa94 +index 0000000000..f321fe2149 --- /dev/null +++ b/util/grub.d/10_linux_zfs.in -@@ -0,0 +1,964 @@ +@@ -0,0 +1,981 @@ +#! /bin/sh +set -e + @@ -196,7 +196,7 @@ + candidate_path="${first_mntdir}/.zfs/snapshot/${snapshot_name}" + fi + -+ if [ -n "$(ls ${candidate_path} 2>/dev/null)" ]; then ++ if [ -n "$(ls "${candidate_path}" 2>/dev/null)" ]; then + echo "${candidate_path}" + return + else @@ -275,7 +275,7 @@ + fi + candidate_path="${first_mntdir}/.zfs/snapshot/${snapshot_name}/${directory}" + fi -+ if [ -n "$(ls ${candidate_path} 2>/dev/null)" ]; then ++ if [ -n "$(ls "${candidate_path}" 2>/dev/null)" ]; then + echo "${candidate_path}" + return + fi @@ -382,7 +382,7 @@ + + dataset_basename="${root_dataset_path##*/}" + candidate_dataset="bpool/BOOT/${dataset_basename}" -+ dataset_properties="$(zfs get -H mountpoint,canmount ${candidate_dataset} | cut -f3 | paste -sd ' ')" ++ dataset_properties="$(zfs get -H mountpoint,canmount "${candidate_dataset}" 2>/dev/null | cut -f3 | paste -sd ' ')" + if [ -z "${dataset_properties}" ]; then + return + fi @@ -470,10 +470,19 @@ + + initrd_list="" + kernel_list="" -+ list=$(find "${boot_dir}" -maxdepth 1 -type f -regex '.*/\(vmlinuz\|vmlinux\|kernel\)-.*') -+ while [ "x$list" != "x" ] ; do -+ linux=`version_find_latest $list` -+ list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '` ++ candidate_kernel_list="$(find "${boot_dir}" -maxdepth 1 -type f -regex '.*/\(vmlinuz\|vmlinux\|kernel\)-.*')" ++ while [ -n "${candidate_kernel_list}" ] ; do ++ list_basename="$(echo "${candidate_kernel_list}" | sed -e 's#.*/##')" ++ linux=$(version_find_latest ${list_basename}) ++ linux=$(echo "${candidate_kernel_list}" | while read k; do ++ if [ "$(basename "${k}")" = "${linux}" ]; then ++ echo -n "${k}" ++ break ++ fi ++ done) ++ # || true to not abort even if candidate_kernel_list is empty on last entry ++ candidate_kernel_list="$(echo "${candidate_kernel_list}" | fgrep -vx "${linux}"||true)" ++ + if ! grub_file_is_not_garbage "${linux}" ; then + continue + fi @@ -526,7 +535,7 @@ + esac + + # for zsys snapshots: we want to know which kernel we successful last booted with -+ last_booted_kernel=$(zfs get -H com.ubuntu.zsys:last-booted-kernel "${dataset}" | awk '{print $3}') ++ last_booted_kernel=$(zfs get -H com.ubuntu.zsys:last-booted-kernel "${dataset}" | awk -v FS='\t' '{print $3}') + + # snapshot: last_used is dataset creation time + if [ "${is_snapshot}" = "true" ]; then @@ -534,7 +543,7 @@ + # otherwise, last_used is manually marked at boot/shutdown on a root dataset for zsys + else + # if current system, take current time -+ if zfs mount | awk '/[ \t]+\/$/ {print $1}' | grep -q ${dataset}; then ++ if zfs mount | awk '/[ \t]+\/$/ {print $1}' | grep -q "${dataset}"; then + last_used=$(date +%s) + else + last_used=$(zfs get -H com.ubuntu.zsys:last-used "${dataset}" | awk '{print $3}') @@ -561,7 +570,7 @@ + umount "${mntdir}" || true + # We needed to look in / for snapshots on root dataset, umount the snapshot for etc before zfs lazily unmount it + case "${etc_dir}" in /.zfs/snapshot/*/etc) -+ snapshot_path="$(findmnt -n -o TARGET -T ${etc_dir})" ++ snapshot_path="$(findmnt -n -o TARGET -T "${etc_dir}")" + umount "${snapshot_path}" || true + ;; + esac @@ -575,12 +584,13 @@ + + for dataset in $(get_root_datasets); do + # get information from current root dataset -+ boot_list="${boot_list}$(get_dataset_info ${dataset} ${mntdir})\n" ++ boot_list="${boot_list}$(get_dataset_info "${dataset}" ${mntdir})\n" + + # get information from snapshots of this root dataset -+ for snapshot_dataset in $(zfs list -H -o name -t snapshot "${dataset}"); do -+ boot_list="${boot_list}$(get_dataset_info ${snapshot_dataset} ${mntdir})\n" -+ done ++ snapshots="$(zfs list -H -o name -t snapshot "${dataset}"|while read snapshot_dataset; do ++ get_dataset_info "${snapshot_dataset}" ${mntdir} ++ done)" ++ [ -n "${snapshots}" ] && boot_list="${boot_list}${snapshots}\n" + done + echo "${boot_list}" +} @@ -639,8 +649,10 @@ + + # We must align initrds with kernels. + # Adds initrds to the stack then pop them 1 by 1 as we process the kernels -+ set -- $(get_field_from_entry "${main_entry}" 7 | tr "|" " ") -+ for kernel in $(get_field_from_entry "${main_entry}" 8 | tr "|" " "); do ++ oldIFS="$IFS" ++ export IFS='|' ++ set -- $(get_field_from_entry "${main_entry}" 7) ++ for kernel in $(get_field_from_entry "${main_entry}" 8); do + # get initrd and pop to the next one + initrd="$1"; shift + @@ -652,6 +664,7 @@ + + echo "${main_entry}" | awk "BEGIN{ FS=\"\t\"; OFS=\"\t\"} {print \$3, \$2, \"advanced\", \$4, \$1, \$6, \"$initrd\", \"$kernel\", \"$was_last_used_kernel\"}" + done ++ IFS="$oldIFS" +} + +# Get history metadata @@ -717,18 +730,21 @@ + + # We must align initrds with kernels. + # Adds initrds to the stack then pop them 1 by 1 as we process the kernels -+ set -- $(get_field_from_entry "${entry}" 7 | tr "|" " ") -+ for k in $(get_field_from_entry "${entry}" 8|tr "|" " "); do ++ oldIFS="$IFS" ++ export IFS='|' ++ set -- $(get_field_from_entry "${entry}" 7) ++ for k in $(get_field_from_entry "${entry}" 8); do + # get initrd and pop to the next one + candidate_initrd="$1"; shift + -+ kernel_basename=$(basename "${k}") ++ kernel_basename=$(basename -- "${k}") + if [ "${kernel_basename}" = "${last_used_kernel}" ]; then + kernel="${k}" + initrd="${candidate_initrd}" + break + fi + done ++ IFS="$oldIFS" + + echo "${entry}" | awk "BEGIN{ FS=\"\t\"; OFS=\"\t\"} {print \$3, \$2, \"history\", \"$name\", \$1, \$6, \"$initrd\", \"$kernel\"}" + done @@ -833,10 +849,11 @@ + linux_default_args="single ${GRUB_CMDLINE_LINUX}" + fi + -+ echo "${submenu_indentation} linux ${kernel} root=ZFS=${dataset} ro ${linux_default_args} ${kernel_additional_args}" ++ # echo in echo trims end of line spaces ++ echo "${submenu_indentation} linux \"${kernel}\" root=ZFS=\"${dataset}\" ro $(echo ${linux_default_args} ${kernel_additional_args})" + + echo "${submenu_indentation} echo '$(gettext_printf "Loading initial ramdisk ..." | grub_quote)'" -+ echo "${submenu_indentation} initrd ${initrd}" ++ echo "${submenu_indentation} initrd \"${initrd}\"" + echo "${submenu_indentation}}" +} + diff -Nru grub2-2.04/debian/patches/uefi-firmware-setup.patch grub2-2.04/debian/patches/uefi-firmware-setup.patch --- grub2-2.04/debian/patches/uefi-firmware-setup.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/uefi-firmware-setup.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From c52b294d6c9b8ddeaf83efc181d405ce9d9784dc Mon Sep 17 00:00:00 2001 +From 0888b50b0d13170037e82429af4792d50959a477 Mon Sep 17 00:00:00 2001 From: Steve Langasek Date: Mon, 13 Jan 2014 12:13:12 +0000 Subject: Output a menu entry for firmware setup on UEFI FastBoot systems @@ -14,7 +14,7 @@ create mode 100644 util/grub.d/30_uefi-firmware.in diff --git a/Makefile.util.def b/Makefile.util.def -index eec1924b0..ce133e694 100644 +index eec1924b0e..ce133e694e 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -526,6 +526,12 @@ script = { @@ -32,7 +32,7 @@ common = util/grub.d/40_custom.in; diff --git a/util/grub.d/30_uefi-firmware.in b/util/grub.d/30_uefi-firmware.in new file mode 100644 -index 000000000..3c9f533d8 +index 0000000000..3c9f533d8c --- /dev/null +++ b/util/grub.d/30_uefi-firmware.in @@ -0,0 +1,46 @@ diff -Nru grub2-2.04/debian/patches/uefi-secure-boot-cryptomount.patch grub2-2.04/debian/patches/uefi-secure-boot-cryptomount.patch --- grub2-2.04/debian/patches/uefi-secure-boot-cryptomount.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/uefi-secure-boot-cryptomount.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From d930e63990e779ac731e350ce1e372738bb28e24 Mon Sep 17 00:00:00 2001 +From faf592ac005c370c8c7b7df2e62b8353c131b043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Werner?= Date: Mon, 28 Jan 2019 17:24:23 +0100 Subject: Fix setup on Secure Boot systems where cryptodisk is in use @@ -19,7 +19,7 @@ 1 file changed, 17 insertions(+) diff --git a/util/grub-install.c b/util/grub-install.c -index 030464645..4bad8de61 100644 +index 0304646453..4bad8de612 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -1546,6 +1546,23 @@ main (int argc, char *argv[]) diff -Nru grub2-2.04/debian/patches/vsnprintf-upper-case-hex.patch grub2-2.04/debian/patches/vsnprintf-upper-case-hex.patch --- grub2-2.04/debian/patches/vsnprintf-upper-case-hex.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/vsnprintf-upper-case-hex.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 7e2eb946ff17cf3b8850d317ce15997c2f70ca05 Mon Sep 17 00:00:00 2001 +From abc2e851414e3f30ea35c355e72cfbd2354d5e9f Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 11 Mar 2019 11:15:12 +0000 Subject: Add %X to grub_vsnprintf_real and friends @@ -18,7 +18,7 @@ 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c -index 3b633d51f..18cad5803 100644 +index 3b633d51f4..18cad5803b 100644 --- a/grub-core/kern/misc.c +++ b/grub-core/kern/misc.c @@ -588,7 +588,7 @@ grub_divmod64 (grub_uint64_t n, grub_uint64_t d, grub_uint64_t *r) diff -Nru grub2-2.04/debian/patches/vt-handoff.patch grub2-2.04/debian/patches/vt-handoff.patch --- grub2-2.04/debian/patches/vt-handoff.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/vt-handoff.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From abb985dff3ac53186817fd9c84d8addf20cd1613 Mon Sep 17 00:00:00 2001 +From 86f800eb735957521c6ff0e5da256eb2ad500f4f Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:30 +0000 Subject: Add configure option to use vt.handoff=7 @@ -19,7 +19,7 @@ 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac -index dbc429ce0..e382c7480 100644 +index dbc429ce0a..e382c7480d 100644 --- a/configure.ac +++ b/configure.ac @@ -1890,6 +1890,17 @@ else @@ -41,7 +41,7 @@ AC_SUBST([FONT_SOURCE]) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index 09393c28e..cc2dd855a 100644 +index 09393c28ee..cc2dd855ab 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -24,6 +24,7 @@ ubuntu_recovery="@UBUNTU_RECOVERY@" @@ -101,7 +101,7 @@ # FIXME: We need an interface to select vesafb in case efifb can't be used. if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 0 ]; then diff --git a/util/grub.d/10_linux_zfs.in b/util/grub.d/10_linux_zfs.in -index 8cd7d1285..48a4e6897 100755 +index ee1d1d272d..055a542346 100755 --- a/util/grub.d/10_linux_zfs.in +++ b/util/grub.d/10_linux_zfs.in @@ -23,6 +23,7 @@ ubuntu_recovery="@UBUNTU_RECOVERY@" @@ -112,7 +112,7 @@ . "${pkgdatadir}/grub-mkconfig_lib" -@@ -721,6 +722,23 @@ generate_grub_menu_metadata() { +@@ -737,6 +738,23 @@ generate_grub_menu_metadata() { # Note: # If 10_linux runs these part will be defined twice in grub configuration print_menu_prologue() { @@ -136,7 +136,7 @@ # Use ELILO's generic "efifb" when it's known to be available. # FIXME: We need an interface to select vesafb in case efifb can't be used. GRUB_GFXPAYLOAD_LINUX="${GRUB_GFXPAYLOAD_LINUX:-}" -@@ -816,7 +834,7 @@ zfs_linux_entry () { +@@ -832,7 +850,7 @@ zfs_linux_entry () { if ([ "${ubuntu_recovery}" = 0 ] || [ "${type}" != "recovery" ]) && \ ([ "${GRUB_GFXPAYLOAD_LINUX}" != "" ] || [ "${gfxpayload_dynamic}" = 1 ]); then @@ -145,7 +145,7 @@ fi echo "${submenu_indentation} insmod gzio" -@@ -879,6 +897,14 @@ generate_grub_menu() { +@@ -896,6 +914,14 @@ generate_grub_menu() { GRUB_CMDLINE_LINUX_RECOVERY="${GRUB_CMDLINE_LINUX_RECOVERY} nomodeset" fi diff -Nru grub2-2.04/debian/patches/wubi-no-windows.patch grub2-2.04/debian/patches/wubi-no-windows.patch --- grub2-2.04/debian/patches/wubi-no-windows.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/wubi-no-windows.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From 1c9945b04f0f47e347710f3f1d12950cd4d2a48d Mon Sep 17 00:00:00 2001 +From f9a0ab82b35abda880a445fd9376973ed0a50b0b Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:24 +0000 Subject: Skip Windows os-prober entries on Wubi systems @@ -19,7 +19,7 @@ 1 file changed, 19 insertions(+) diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in -index b7e1147c4..271044f59 100644 +index b7e1147c41..271044f592 100644 --- a/util/grub.d/30_os-prober.in +++ b/util/grub.d/30_os-prober.in @@ -110,6 +110,8 @@ EOF diff -Nru grub2-2.04/debian/patches/zpool-full-device-name.patch grub2-2.04/debian/patches/zpool-full-device-name.patch --- grub2-2.04/debian/patches/zpool-full-device-name.patch 2021-01-14 12:27:23.000000000 +0000 +++ grub2-2.04/debian/patches/zpool-full-device-name.patch 2021-02-11 16:22:32.000000000 +0000 @@ -1,4 +1,4 @@ -From da9b6788c5db3379adf19f0b43d99c49ba0b2650 Mon Sep 17 00:00:00 2001 +From 770c98ce2f72f6701c67fffa0bf7bfbce3457c74 Mon Sep 17 00:00:00 2001 From: Chad MILLER Date: Thu, 27 Oct 2016 17:15:07 -0400 Subject: Tell zpool to emit full device names @@ -20,7 +20,7 @@ 1 file changed, 1 insertion(+) diff --git a/grub-core/osdep/unix/getroot.c b/grub-core/osdep/unix/getroot.c -index 46d7116c6..da102918d 100644 +index 46d7116c6e..da102918dc 100644 --- a/grub-core/osdep/unix/getroot.c +++ b/grub-core/osdep/unix/getroot.c @@ -243,6 +243,7 @@ grub_util_find_root_devices_from_poolname (char *poolname) diff -Nru grub2-2.04/debian/rules grub2-2.04/debian/rules --- grub2-2.04/debian/rules 2021-01-14 12:28:42.000000000 +0000 +++ grub2-2.04/debian/rules 2021-02-11 16:22:32.000000000 +0000 @@ -180,6 +180,17 @@ done cp /usr/share/lzo/minilzo/*.c /usr/share/lzo/minilzo/*.h grub-core/lib/minilzo/ +override_dh_autoreconf_clean: + [ ! -e debian/autoreconf.after ] || for patchname in \ + 0004-Use-SHELL-rather-than-bin-sh \ + 0003-Make-msgfmt-output-in-little-endian \ + 0002-Handle-gettext_printf-shell-function \ + 0001-Support-POTFILES-shell; do \ + patch -d po -p3 -R \ + < "debian/gettext-patches/$$patchname.patch"; \ + done + dh_autoreconf_clean + debian/stamps/configure-grub-common: debian/stamps/configure-grub-$(COMMON_PLATFORM) touch $@