grub2/grub2-btrfs-04-grub2-install.patch
Michael Chang 7e75e7f881 Accepting request 1138021 from home:michael-chang:grub:2.12
- Version bump to 2.12 (PED-5589)
  * Added:
    - grub-2.12.tar.xz
    - fix_no_extra_deps_in_release_tarball.patch
  * Removed:
    - grub-2.12~rc1.tar.xz
  * Patch dropped as it merged into new version:
    - 0001-disk-cryptodisk-Fix-missing-change-when-updating-to-.patch
    - 0001-fs-btrfs-Zero-file-data-not-backed-by-extents.patch
    - 0001-fs-ntfs-Fix-an-OOB-write-when-parsing-the-ATTRIBUTE_.patch
    - 0002-fs-ntfs-Fix-an-OOB-read-when-reading-data-from-the-r.patch
    - 0003-fs-ntfs-Fix-an-OOB-read-when-parsing-directory-entri.patch
    - 0004-fs-ntfs-Fix-an-OOB-read-when-parsing-bitmaps-for-ind.patch
    - 0005-fs-ntfs-Fix-an-OOB-read-when-parsing-a-volume-label.patch
    - 0006-fs-ntfs-Make-code-more-readable.patch
    - 0001-kern-ieee1275-init-Restrict-high-memory-in-presence-.patch
    - 0001-fs-xfs-Incorrect-short-form-directory-data-boundary-.patch
    - 0002-fs-xfs-Fix-XFS-directory-extent-parsing.patch
    - 0003-fs-xfs-add-large-extent-counters-incompat-feature-su.patch
    - 0001-mkstandalone-ensure-stable-timestamps-for-generated-.patch
    - 0002-mkstandalone-ensure-deterministic-tar-file-creation-.patch
  * Patch adjusted for the updated base version:
    - use-grub2-as-a-package-name.patch
    - grub2-s390x-04-grub2-install.patch
    - grub2-btrfs-04-grub2-install.patch
    - grub2-ppc64le-disable-video.patch
    - 0002-AUDIT-0-http-boot-tracker-bug.patch
    - 0001-Unify-the-check-to-enable-btrfs-relative-path.patch
    - 0003-Handle-multi-arch-64-on-32-boot-in-linuxefi-loader.patch
    - 0004-Add-suport-for-signing-grub-with-an-appended-signatu.patch

OBS-URL: https://build.opensuse.org/request/show/1138021
OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=480
2024-01-11 07:48:22 +00:00

148 lines
3.6 KiB
Diff

--- a/grub-core/osdep/unix/config.c
+++ b/grub-core/osdep/unix/config.c
@@ -207,6 +207,19 @@
if (v)
cfg->grub_distributor = xstrdup (v);
+ v = getenv ("SUSE_BTRFS_SNAPSHOT_BOOTING");
+ if (v)
+ {
+ if (grub_strncmp(v, "true", sizeof ("true") - 1) == 0)
+ {
+ cfg->is_suse_btrfs_snapshot_enabled = 1;
+ }
+ else
+ {
+ cfg->is_suse_btrfs_snapshot_enabled = 0;
+ }
+ }
+
cfgfile = grub_util_get_config_filename ();
if (!grub_util_is_regular (cfgfile))
return;
@@ -230,8 +243,8 @@
*ptr++ = *iptr;
}
- strcpy (ptr, "'; printf \"GRUB_ENABLE_CRYPTODISK=%s\\nGRUB_DISTRIBUTOR=%s\\n\" "
- "\"$GRUB_ENABLE_CRYPTODISK\" \"$GRUB_DISTRIBUTOR\"");
+ strcpy (ptr, "'; printf \"GRUB_ENABLE_CRYPTODISK=%s\\nGRUB_DISTRIBUTOR=%s\\nSUSE_BTRFS_SNAPSHOT_BOOTING=%s\\n\" "
+ "\"$GRUB_ENABLE_CRYPTODISK\" \"$GRUB_DISTRIBUTOR\" \"$SUSE_BTRFS_SNAPSHOT_BOOTING\"");
argv[2] = script;
argv[3] = '\0';
--- a/include/grub/emu/config.h
+++ b/include/grub/emu/config.h
@@ -37,6 +37,7 @@
{
int is_cryptodisk_enabled;
char *grub_distributor;
+ int is_suse_btrfs_snapshot_enabled;
};
void
--- a/util/config.c
+++ b/util/config.c
@@ -42,6 +42,16 @@
cfg->is_cryptodisk_enabled = 1;
continue;
}
+ if (grub_strncmp (ptr, "SUSE_BTRFS_SNAPSHOT_BOOTING=",
+ sizeof ("SUSE_BTRFS_SNAPSHOT_BOOTING=") - 1) == 0)
+ {
+ ptr += sizeof ("SUSE_BTRFS_SNAPSHOT_BOOTING=") - 1;
+ if (*ptr == '"' || *ptr == '\'')
+ ptr++;
+ if (grub_strncmp(ptr, "true", sizeof ("true") - 1) == 0)
+ cfg->is_suse_btrfs_snapshot_enabled = 1;
+ continue;
+ }
if (grub_strncmp (ptr, "GRUB_DISTRIBUTOR=",
sizeof ("GRUB_DISTRIBUTOR=") - 1) == 0)
{
--- a/util/grub-install.c
+++ b/util/grub-install.c
@@ -857,6 +857,8 @@
}
#endif
+extern int use_relative_path_on_btrfs;
+
int
main (int argc, char *argv[])
{
@@ -890,6 +892,9 @@
grub_util_load_config (&config);
+ if (config.is_suse_btrfs_snapshot_enabled)
+ use_relative_path_on_btrfs = 1;
+
if (!bootloader_id && config.grub_distributor)
{
char *ptr;
@@ -1451,6 +1456,15 @@
debug_image);
}
+ if (config.is_suse_btrfs_snapshot_enabled
+ && grub_strncmp(grub_fs->name, "btrfs", sizeof ("btrfs") - 1) == 0)
+ {
+ if (!load_cfg_f)
+ load_cfg_f = grub_util_fopen (load_cfg, "wb");
+ have_load_cfg = 1;
+ fprintf (load_cfg_f, "set btrfs_relative_path='y'\n");
+ }
+
if (!have_abstractions)
{
if ((disk_module && grub_strcmp (disk_module, "biosdisk") != 0)
--- a/grub-core/osdep/linux/getroot.c
+++ b/grub-core/osdep/linux/getroot.c
@@ -373,6 +373,7 @@
return NULL;
}
+int use_relative_path_on_btrfs = 0;
char **
grub_find_root_devices_from_mountinfo (const char *dir, char **relroot)
@@ -516,6 +517,12 @@
{
ret = grub_find_root_devices_from_btrfs (dir);
fs_prefix = get_btrfs_fs_prefix (entries[i].enc_path);
+ if (use_relative_path_on_btrfs)
+ {
+ if (fs_prefix)
+ free (fs_prefix);
+ fs_prefix = xstrdup ("/");
+ }
}
else if (!retry && grub_strcmp (entries[i].fstype, "autofs") == 0)
{
--- a/util/grub-mkrelpath.c
+++ b/util/grub-mkrelpath.c
@@ -40,9 +40,12 @@
};
static struct argp_option options[] = {
+ {"relative", 'r', 0, 0, "use relative path on btrfs", 0},
{ 0, 0, 0, 0, 0, 0 }
};
+extern int use_relative_path_on_btrfs;
+
static error_t
argp_parser (int key, char *arg, struct argp_state *state)
{
@@ -52,6 +55,9 @@
switch (key)
{
+ case 'r':
+ use_relative_path_on_btrfs = 1;
+ break;
case ARGP_KEY_ARG:
if (state->arg_num == 0)
arguments->pathname = xstrdup (arg);