Hello community,

here is the log from the commit of package grub2 for openSUSE:Factory checked 
in at 2020-10-26 16:11:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/grub2 (Old)
 and      /work/SRC/openSUSE:Factory/.grub2.new.3463 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "grub2"

Mon Oct 26 16:11:47 2020 rev:230 rq:843382 version:2.04

Changes:
--------
--- /work/SRC/openSUSE:Factory/grub2/grub2.changes      2020-10-21 
12:34:47.405982559 +0200
+++ /work/SRC/openSUSE:Factory/.grub2.new.3463/grub2.changes    2020-10-26 
16:12:16.394714020 +0100
@@ -1,0 +2,28 @@
+Thu Oct 22 06:19:13 UTC 2020 - Michael Chang <mch...@suse.com>
+
+- Fix grub2-install error with "failed to get canonical path of
+  `/boot/grub2/i386-pc'." (bsc#1177957)
+  * Modified 0002-grub-install-Avoid-incompleted-install-on-i386-pc.patch
+
+-------------------------------------------------------------------
+Wed Oct 14 08:46:46 UTC 2020 - Michael Chang <mch...@suse.com>
+
+- 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 <mch...@suse.com>
+
+- 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 <mch...@suse.com>
+
+- 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
+
+-------------------------------------------------------------------

New:
----
  0001-Warn-if-MBR-gap-is-small-and-user-uses-advanced-modu.patch
  0002-grub-install-Avoid-incompleted-install-on-i386-pc.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ grub2.spec ++++++
--- /var/tmp/diff_new_pack.r7ofiC/_old  2020-10-26 16:12:19.066716478 +0100
+++ /var/tmp/diff_new_pack.r7ofiC/_new  2020-10-26 16:12:19.066716478 +0100
@@ -138,7 +138,7 @@
 %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,6 +332,10 @@
 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
@@ -399,7 +403,7 @@
 
 Summary:        Bootloader with support for Linux, Multiboot and more
 Group:          System/Boot
-%if %{platform} != emu
+%if "%{platform}" != "emu"
 BuildArch:      noarch
 %endif
 Requires:       %{name} = %{version}
@@ -420,7 +424,7 @@
 %package %{grubarch}-debug
 Summary:        Debug symbols for %{grubarch}
 Group:          System/Boot
-%if %{platform} != emu
+%if "%{platform}" != "emu"
 BuildArch:      noarch
 %endif
 Requires:       %{name}-%{grubarch} = %{version}
@@ -464,7 +468,7 @@
 %package %{grubefiarch}-debug
 Summary:        Debug symbols for %{grubefiarch}
 Group:          System/Boot
-%if %{platform} != emu
+%if "%{platform}" != "emu"
 BuildArch:      noarch
 %endif
 Requires:       %{name}-%{grubefiarch} = %{version}
@@ -655,6 +659,8 @@
 %patch719 -p1
 %patch720 -p1
 %patch721 -p1
+%patch722 -p1
+%patch723 -p1
 
 %build
 # collect evidence to debug spurious build failure on SLE15
@@ -811,7 +817,7 @@
 %define _target_platform i386-%{_vendor}-%{_target_os}%{?_gnu}
 %endif
 
-%if %{platform} != "emu"
+%if "%{platform}" != "emu"
 %define arch_specific --enable-device-mapper
 TLFLAGS="-static"
 

++++++ 0001-Warn-if-MBR-gap-is-small-and-user-uses-advanced-modu.patch ++++++
>From 53e9a353dbc5110039bc229e271ea60f7bc5bd69 Mon Sep 17 00:00:00 2001
From: Vladimir 'phcoder' Serbinenko <phco...@gmail.com>
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 <grub/msdos_partition.h>
 #include <grub/gpt_partition.h>
 #include <grub/i18n.h>
+#ifdef GRUB_UTIL
+#include <grub/emu/misc.h>
+#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, &sectors);
+                                      GRUB_EMBED_PCBIOS, &sectors, 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

++++++ 0001-add-support-for-UEFI-network-protocols.patch ++++++
--- /var/tmp/diff_new_pack.r7ofiC/_old  2020-10-26 16:12:19.098716508 +0100
+++ /var/tmp/diff_new_pack.r7ofiC/_new  2020-10-26 16:12:19.102716511 +0100
@@ -33,6 +33,11 @@
   * 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 +-
@@ -1990,7 +1995,7 @@
 ===================================================================
 --- /dev/null
 +++ grub-2.04/grub-core/net/efi/net.c
-@@ -0,0 +1,1437 @@
+@@ -0,0 +1,1440 @@
 +#include <grub/net.h>
 +#include <grub/env.h>
 +#include <grub/mm.h>
@@ -2792,13 +2797,16 @@
 +  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_print_error ();
++      grub_dprintf ("efinetfs", "error in matching route : %s\n", 
grub_errmsg);
++      grub_error_pop ();
 +      return NULL;
 +    }
++  grub_error_pop ();
 +
 +  if (is_ip6)
 +    {

++++++ 0002-grub-install-Avoid-incompleted-install-on-i386-pc.patch ++++++
>From 4cf2e774557c782aa7156b2261d603212b24a64c Mon Sep 17 00:00:00 2001
From: Michael Chang <mch...@suse.com>
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.

V1:
  * Create platform directory, /boot/grub2/i386-pc, which is required to
    have existed in the process of setting up prefix for the core.img.
    This fixed "failed to get canonical path of `/boot/grub2/i386-pc`"
    error during grub-install.

Signed-off-by: Michael Chang <mch...@suse.com>
---
 util/grub-install.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Index: grub-2.04/util/grub-install.c
===================================================================
--- grub-2.04.orig/util/grub-install.c
+++ grub-2.04/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))
@@ -1430,6 +1431,7 @@ main (int argc, char *argv[])
   {
     char *t = grub_util_path_concat (2, grubdir,
                                   platname);
+    grub_install_mkdir_p (t);
     platdir = grub_canonicalize_file_name (t);
     if (!platdir)
       grub_util_error (_("failed to get canonical path of `%s'"),
@@ -1964,6 +1966,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:



Reply via email to