From 83ace30e23c7c41b8e2e96c76082f5405a8b08129fac33587f91afc44c2c4edc Mon Sep 17 00:00:00 2001 From: Dominique Leuenberger Date: Wed, 21 Oct 2020 10:34:45 +0000 Subject: [PATCH] https://bugzilla.opensuse.org/show_bug.cgi?id=1177957 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/grub2?expand=0&rev=229 --- ...is-small-and-user-uses-advanced-modu.patch | 233 ------------------ ...d-support-for-UEFI-network-protocols.patch | 12 +- ...Avoid-incompleted-install-on-i386-pc.patch | 47 ---- grub2.changes | 21 -- grub2.spec | 16 +- 5 files changed, 7 insertions(+), 322 deletions(-) delete mode 100644 0001-Warn-if-MBR-gap-is-small-and-user-uses-advanced-modu.patch delete mode 100644 0002-grub-install-Avoid-incompleted-install-on-i386-pc.patch diff --git a/0001-Warn-if-MBR-gap-is-small-and-user-uses-advanced-modu.patch b/0001-Warn-if-MBR-gap-is-small-and-user-uses-advanced-modu.patch deleted file mode 100644 index 88387e9..0000000 --- a/0001-Warn-if-MBR-gap-is-small-and-user-uses-advanced-modu.patch +++ /dev/null @@ -1,233 +0,0 @@ -From 53e9a353dbc5110039bc229e271ea60f7bc5bd69 Mon Sep 17 00:00:00 2001 -From: Vladimir 'phcoder' Serbinenko -Date: Mon, 27 Apr 2020 17:51:34 +0200 -Subject: [PATCH 1/2] Warn if MBR gap is small and user uses advanced modules - -We don't want to support small MBR gap in pair with anything but -the simplest config of biosdisk+part_msdos+simple filesystem. In this -path "simple filesystems" are all current filesystems except zfs and -btrfs. ---- - grub-core/partmap/gpt.c | 9 ++++++++- - grub-core/partmap/msdos.c | 7 ++++++- - include/grub/partition.h | 4 +++- - include/grub/util/install.h | 7 +++++-- - util/grub-install-common.c | 25 +++++++++++++++++++++++++ - util/grub-install.c | 13 +++++++++---- - util/grub-setup.c | 2 +- - util/setup.c | 5 +++-- - 8 files changed, 60 insertions(+), 12 deletions(-) - -diff --git a/grub-core/partmap/gpt.c b/grub-core/partmap/gpt.c -index 72a2e37cd..20cbcc7ff 100644 ---- a/grub-core/partmap/gpt.c -+++ b/grub-core/partmap/gpt.c -@@ -25,6 +25,9 @@ - #include - #include - #include -+#ifdef GRUB_UTIL -+#include -+#endif - - GRUB_MOD_LICENSE ("GPLv3+"); - -@@ -169,7 +172,8 @@ static grub_err_t - gpt_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors, - unsigned int max_nsectors, - grub_embed_type_t embed_type, -- grub_disk_addr_t **sectors) -+ grub_disk_addr_t **sectors, -+ int warn_short) - { - struct gpt_partition_map_embed_ctx ctx = { - .start = 0, -@@ -191,6 +195,9 @@ gpt_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors, - N_("this GPT partition label contains no BIOS Boot Partition;" - " embedding won't be possible")); - -+ if (ctx.len < GRUB_MIN_RECOMMENDED_MBRGAP) { -+ grub_util_warn("Your BIOS Boot Partition is under 1 MiB, please increase its size."); -+ } - if (ctx.len < *nsectors) - return grub_error (GRUB_ERR_OUT_OF_RANGE, - N_("your BIOS Boot Partition is too small;" -diff --git a/grub-core/partmap/msdos.c b/grub-core/partmap/msdos.c -index 508f0ff76..fb452d5fc 100644 ---- a/grub-core/partmap/msdos.c -+++ b/grub-core/partmap/msdos.c -@@ -243,7 +243,8 @@ static grub_err_t - pc_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors, - unsigned int max_nsectors, - grub_embed_type_t embed_type, -- grub_disk_addr_t **sectors) -+ grub_disk_addr_t **sectors, -+ int warn_short) - { - grub_disk_addr_t end = ~0ULL; - struct grub_msdos_partition_mbr mbr; -@@ -397,6 +398,10 @@ pc_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors, - return GRUB_ERR_NONE; - } - -+ if (end < GRUB_MIN_RECOMMENDED_MBRGAP && warn_short) { -+ grub_util_warn("You have a short MBR gap and use advanced config. Please increase post-MBR gap"); -+ } -+ - if (end <= 1) - return grub_error (GRUB_ERR_FILE_NOT_FOUND, - N_("this msdos-style partition label has no " -diff --git a/include/grub/partition.h b/include/grub/partition.h -index 7adb7ec6e..adc50d680 100644 ---- a/include/grub/partition.h -+++ b/include/grub/partition.h -@@ -52,10 +52,12 @@ struct grub_partition_map - grub_partition_iterate_hook_t hook, void *hook_data); - #ifdef GRUB_UTIL - /* Determine sectors available for embedding. */ -+#define GRUB_MIN_RECOMMENDED_MBRGAP 1900 - grub_err_t (*embed) (struct grub_disk *disk, unsigned int *nsectors, - unsigned int max_nsectors, - grub_embed_type_t embed_type, -- grub_disk_addr_t **sectors); -+ grub_disk_addr_t **sectors, -+ int warn_short); - #endif - }; - typedef struct grub_partition_map *grub_partition_map_t; -diff --git a/include/grub/util/install.h b/include/grub/util/install.h -index f56058111..1541ee233 100644 ---- a/include/grub/util/install.h -+++ b/include/grub/util/install.h -@@ -194,13 +194,13 @@ grub_util_bios_setup (const char *dir, - const char *boot_file, const char *core_file, - const char *dest, int force, - int fs_probe, int allow_floppy, -- int add_rs_codes); -+ int add_rs_codes, int warn_short_mbr_gap); - void - grub_util_sparc_setup (const char *dir, - const char *boot_file, const char *core_file, - const char *dest, int force, - int fs_probe, int allow_floppy, -- int add_rs_codes); -+ int add_rs_codes, int warn_short_mbr_gap); - - char * - grub_install_get_image_targets_string (void); -@@ -269,6 +269,9 @@ grub_util_get_target_name (const struct grub_install_image_target_desc *t); - extern char *grub_install_copy_buffer; - #define GRUB_INSTALL_COPY_BUFFER_SIZE 1048576 - -+int -+grub_install_is_short_mbrgap_supported(void); -+ - int - grub_install_sync_fs_journal (const char *path); - #endif -diff --git a/util/grub-install-common.c b/util/grub-install-common.c -index 9cc217d70..4c04b1bce 100644 ---- a/util/grub-install-common.c -+++ b/util/grub-install-common.c -@@ -234,6 +234,31 @@ char *grub_install_source_directory = NULL; - char *grub_install_locale_directory = NULL; - char *grub_install_themes_directory = NULL; - -+int -+grub_install_is_short_mbrgap_supported() -+{ -+ int i, j; -+ static const char *whitelist[] = -+ { -+ "part_msdos", "biosdisk", "affs", "afs", "bfs", "archelp", -+ "cpio", "cpio_be", "newc", "odc", "ext2", "fat", "exfat", -+ "f2fs", "fshelp", "hfs", "hfsplus", "hfspluscomp", -+ "iso9660", "jfs", "minix", "minix2", "minix3", "minix_be", -+ "minix2_be", "minix2_be", "nilfs2", "ntfs", "ntfscomp", -+ "reiserfs", "romfs", "sfs", "squash4", "tar", "udf", -+ "ufs1", "ufs1_be", "ufs2", "xfs" -+ }; -+ for (i = 0; i < modules.n_entries; i++) -+ { -+ for (j = 0; j < ARRAY_SIZE (whitelist); j++) -+ if (strcmp(modules.entries[i], whitelist[j]) == 0) -+ break; -+ if (j == ARRAY_SIZE (whitelist)) -+ return 0; -+ } -+ return 1; -+} -+ - void - grub_install_push_module (const char *val) - { -diff --git a/util/grub-install.c b/util/grub-install.c -index 8d18f2530..ac8f98552 100644 ---- a/util/grub-install.c -+++ b/util/grub-install.c -@@ -1956,9 +1956,14 @@ main (int argc, char *argv[]) - - /* Now perform the installation. */ - if (install_bootsector) -- grub_util_bios_setup (platdir, "boot.img", "core.img", -- install_drive, force, -- fs_probe, allow_floppy, add_rs_codes); -+ { -+ int warn_short_mbr_gap = !grub_install_is_short_mbrgap_supported(); -+ -+ grub_util_bios_setup (platdir, "boot.img", "core.img", -+ install_drive, force, -+ fs_probe, allow_floppy, add_rs_codes, -+ warn_short_mbr_gap); -+ } - break; - } - case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275: -@@ -1985,7 +1990,7 @@ main (int argc, char *argv[]) - grub_util_sparc_setup (platdir, "boot.img", "core.img", - install_drive, force, - fs_probe, allow_floppy, -- 0 /* unused */ ); -+ 0 /* unused */, 0 /* unused */ ); - break; - } - -diff --git a/util/grub-setup.c b/util/grub-setup.c -index 42b98ad3c..1783224dd 100644 ---- a/util/grub-setup.c -+++ b/util/grub-setup.c -@@ -315,7 +315,7 @@ main (int argc, char *argv[]) - arguments.core_file ? : DEFAULT_CORE_FILE, - dest_dev, arguments.force, - arguments.fs_probe, arguments.allow_floppy, -- arguments.add_rs_codes); -+ arguments.add_rs_codes, 0); - - /* Free resources. */ - grub_fini_all (); -diff --git a/util/setup.c b/util/setup.c -index 59b2b4b85..f34dcb0fe 100644 ---- a/util/setup.c -+++ b/util/setup.c -@@ -254,7 +254,8 @@ SETUP (const char *dir, - const char *boot_file, const char *core_file, - const char *dest, int force, - int fs_probe, int allow_floppy, -- int add_rs_codes __attribute__ ((unused))) /* unused on sparc64 */ -+ int add_rs_codes __attribute__ ((unused)), /* unused on sparc64 */ -+ int warn_small) - { - char *core_path; - char *boot_img, *core_img, *boot_path; -@@ -528,7 +529,7 @@ SETUP (const char *dir, - else if (ctx.dest_partmap) - { - err = ctx.dest_partmap->embed (dest_dev->disk, &nsec, maxsec, -- GRUB_EMBED_PCBIOS, §ors); -+ GRUB_EMBED_PCBIOS, §ors, warn_small); - #ifdef GRUB_SETUP_BIOS - if ((err == GRUB_ERR_OUT_OF_RANGE || err == GRUB_ERR_FILE_NOT_FOUND) - && dest_dev->disk->id == root_dev->disk->id --- -2.26.2 - diff --git a/0001-add-support-for-UEFI-network-protocols.patch b/0001-add-support-for-UEFI-network-protocols.patch index fd302d8..546333e 100644 --- a/0001-add-support-for-UEFI-network-protocols.patch +++ b/0001-add-support-for-UEFI-network-protocols.patch @@ -33,11 +33,6 @@ V5: * 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 - --- grub-core/Makefile.core.def | 18 + grub-core/io/bufio.c | 2 +- @@ -1995,7 +1990,7 @@ Index: grub-2.04/grub-core/net/efi/net.c =================================================================== --- /dev/null +++ grub-2.04/grub-core/net/efi/net.c -@@ -0,0 +1,1440 @@ +@@ -0,0 +1,1437 @@ +#include +#include +#include @@ -2797,16 +2792,13 @@ Index: grub-2.04/grub-core/net/efi/net.c + 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 (); ++ grub_print_error (); + return NULL; + } -+ grub_error_pop (); + + if (is_ip6) + { diff --git a/0002-grub-install-Avoid-incompleted-install-on-i386-pc.patch b/0002-grub-install-Avoid-incompleted-install-on-i386-pc.patch deleted file mode 100644 index 40aea7a..0000000 --- a/0002-grub-install-Avoid-incompleted-install-on-i386-pc.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 4cf2e774557c782aa7156b2261d603212b24a64c Mon Sep 17 00:00:00 2001 -From: Michael Chang -Date: Sat, 26 Sep 2020 20:29:40 +0800 -Subject: [PATCH 2/2] grub-install: Avoid incompleted install on i386-pc - -If any error happens between grub_install_copy_files() and -grub_util_bios_setup(), the system would become unbootable with error -like undefined symbol as a result of incompleted install that leaves -behind images on disk from different build to the modules on /boot. - -This patch makes grub_install_copy_files() an adjecent call to -grub_util_bios_setup() to minimize the risk of running into any error in -between that would abort the process. - -Signed-off-by: Michael Chang ---- - util/grub-install.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/util/grub-install.c b/util/grub-install.c -index ac8f98552..bb3c81660 100644 ---- a/util/grub-install.c -+++ b/util/grub-install.c -@@ -1340,8 +1340,9 @@ main (int argc, char *argv[]) - } - } - -- grub_install_copy_files (grub_install_source_directory, -- grubdir, platform); -+ if (platform != GRUB_INSTALL_PLATFORM_I386_PC) -+ grub_install_copy_files (grub_install_source_directory, -+ grubdir, platform); - - char *envfile = grub_util_path_concat (2, grubdir, "grubenv"); - if (!grub_util_is_regular (envfile)) -@@ -1964,6 +1965,8 @@ main (int argc, char *argv[]) - fs_probe, allow_floppy, add_rs_codes, - warn_short_mbr_gap); - } -+ grub_install_copy_files (grub_install_source_directory, -+ grubdir, platform); - break; - } - case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275: --- -2.26.2 - diff --git a/grub2.changes b/grub2.changes index cdc2d7e..f8384bf 100644 --- a/grub2.changes +++ b/grub2.changes @@ -1,24 +1,3 @@ -------------------------------------------------------------------- -Wed Oct 14 08:46:46 UTC 2020 - Michael Chang - -- Fix https boot interrupted by unrecognised network address error message - (bsc#1172952) - * 0001-add-support-for-UEFI-network-protocols.patch - -------------------------------------------------------------------- -Tue Oct 13 08:54:10 UTC 2020 - Michael Chang - -- grub2.spec: Fix bare words used as string in expression which is no longer - allowed in rpm 4.16 - -------------------------------------------------------------------- -Fri Sep 25 07:13:27 UTC 2020 - Michael Chang - -- Improve the error handling when grub2-install fails with short mbr gap - (bsc#1176062) - * 0001-Warn-if-MBR-gap-is-small-and-user-uses-advanced-modu.patch - * 0002-grub-install-Avoid-incompleted-install-on-i386-pc.patch - ------------------------------------------------------------------- Wed Sep 9 08:10:45 UTC 2020 - Michael Chang diff --git a/grub2.spec b/grub2.spec index 6e20bb5..586bad9 100644 --- a/grub2.spec +++ b/grub2.spec @@ -138,7 +138,7 @@ BuildRequires: update-bootloader-rpm-macros %define grubxenarch x86_64-xen %endif -%if "%{platform}" == "emu" +%if %{platform} == emu # force %%{emu} to 1, e.g. for s390 %define emu 1 %endif @@ -332,10 +332,6 @@ Patch718: 0002-ieee1275-powerpc-enables-device-mapper-discovery.patch Patch719: 0001-Unify-the-check-to-enable-btrfs-relative-path.patch Patch720: 0001-shim_lock-Disable-GRUB_VERIFY_FLAGS_DEFER_AUTH-if-se.patch Patch721: 0001-efi-linux-provide-linux-command.patch -# Improve the error handling when grub2-install fails with short mbr gap -# (bsc#1176062) -Patch722: 0001-Warn-if-MBR-gap-is-small-and-user-uses-advanced-modu.patch -Patch723: 0002-grub-install-Avoid-incompleted-install-on-i386-pc.patch Requires: gettext-runtime %if 0%{?suse_version} >= 1140 @@ -403,7 +399,7 @@ Upstream branding for GRUB2's graphical console Summary: Bootloader with support for Linux, Multiboot and more Group: System/Boot -%if "%{platform}" != "emu" +%if %{platform} != emu BuildArch: noarch %endif Requires: %{name} = %{version} @@ -424,7 +420,7 @@ provides support for %{platform} systems. %package %{grubarch}-debug Summary: Debug symbols for %{grubarch} Group: System/Boot -%if "%{platform}" != "emu" +%if %{platform} != emu BuildArch: noarch %endif Requires: %{name}-%{grubarch} = %{version} @@ -468,7 +464,7 @@ provides support for EFI systems. %package %{grubefiarch}-debug Summary: Debug symbols for %{grubefiarch} Group: System/Boot -%if "%{platform}" != "emu" +%if %{platform} != emu BuildArch: noarch %endif Requires: %{name}-%{grubefiarch} = %{version} @@ -659,8 +655,6 @@ swap partition while in resuming %patch719 -p1 %patch720 -p1 %patch721 -p1 -%patch722 -p1 -%patch723 -p1 %build # collect evidence to debug spurious build failure on SLE15 @@ -817,7 +811,7 @@ cd build %define _target_platform i386-%{_vendor}-%{_target_os}%{?_gnu} %endif -%if "%{platform}" != "emu" +%if %{platform} != "emu" %define arch_specific --enable-device-mapper TLFLAGS="-static"