forked from pool/grub2
24522d5d12
- Support saving grub environment for POWER signed grub images (jsc#SLE-23854) * 0001-Add-grub_envblk_buf-helper-function.patch * 0002-Add-grub_disk_write_tail-helper-function.patch * 0003-grub-install-support-prep-environment-block.patch * 0004-Introduce-prep_load_env-command.patch * 0005-export-environment-at-start-up.patch - Use enviroment variable in early boot config to looking up root device * grub2.spec OBS-URL: https://build.opensuse.org/request/show/959762 OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=406
69 lines
2.2 KiB
Diff
69 lines
2.2 KiB
Diff
From a326e486bdcf99e6be973ba54c0abfb6d2d95b73 Mon Sep 17 00:00:00 2001
|
|
From: Michael Chang <mchang@suse.com>
|
|
Date: Mon, 17 Jan 2022 17:45:00 +0800
|
|
Subject: [PATCH 1/5] Add grub_envblk_buf helper function
|
|
|
|
This helps in creation and initialization of memory buffer for
|
|
environment block of given size.
|
|
|
|
Signed-off-by: Michael Chang <mchang@suse.com>
|
|
---
|
|
grub-core/lib/envblk.c | 12 ++++++++++++
|
|
include/grub/lib/envblk.h | 1 +
|
|
util/grub-editenv.c | 4 +---
|
|
3 files changed, 14 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/grub-core/lib/envblk.c b/grub-core/lib/envblk.c
|
|
index 2e4e78b132..24efbe7ffa 100644
|
|
--- a/grub-core/lib/envblk.c
|
|
+++ b/grub-core/lib/envblk.c
|
|
@@ -23,6 +23,18 @@
|
|
#include <grub/mm.h>
|
|
#include <grub/lib/envblk.h>
|
|
|
|
+char *
|
|
+grub_envblk_buf (grub_size_t size)
|
|
+{
|
|
+ char *buf;
|
|
+
|
|
+ buf = grub_malloc (size);
|
|
+ grub_memcpy (buf, GRUB_ENVBLK_SIGNATURE, sizeof (GRUB_ENVBLK_SIGNATURE) - 1);
|
|
+ grub_memset (buf + sizeof (GRUB_ENVBLK_SIGNATURE) - 1, '#', size - sizeof (GRUB_ENVBLK_SIGNATURE) + 1);
|
|
+
|
|
+ return buf;
|
|
+}
|
|
+
|
|
grub_envblk_t
|
|
grub_envblk_open (char *buf, grub_size_t size)
|
|
{
|
|
diff --git a/include/grub/lib/envblk.h b/include/grub/lib/envblk.h
|
|
index c3e6559217..83f3fcf841 100644
|
|
--- a/include/grub/lib/envblk.h
|
|
+++ b/include/grub/lib/envblk.h
|
|
@@ -31,6 +31,7 @@ struct grub_envblk
|
|
};
|
|
typedef struct grub_envblk *grub_envblk_t;
|
|
|
|
+char *grub_envblk_buf (grub_size_t size);
|
|
grub_envblk_t grub_envblk_open (char *buf, grub_size_t size);
|
|
int grub_envblk_set (grub_envblk_t envblk, const char *name, const char *value);
|
|
void grub_envblk_delete (grub_envblk_t envblk, const char *name);
|
|
diff --git a/util/grub-editenv.c b/util/grub-editenv.c
|
|
index b8219335f7..a02d3f2a63 100644
|
|
--- a/util/grub-editenv.c
|
|
+++ b/util/grub-editenv.c
|
|
@@ -210,9 +210,7 @@ create_envblk_fs (void)
|
|
if (! fp)
|
|
grub_util_error (_("cannot open `%s': %s"), device, strerror (errno));
|
|
|
|
- buf = xmalloc (size);
|
|
- memcpy (buf, GRUB_ENVBLK_SIGNATURE, sizeof (GRUB_ENVBLK_SIGNATURE) - 1);
|
|
- memset (buf + sizeof (GRUB_ENVBLK_SIGNATURE) - 1, '#', size - sizeof (GRUB_ENVBLK_SIGNATURE) + 1);
|
|
+ buf = grub_envblk_buf (size);
|
|
|
|
if (fseek (fp, offset, SEEK_SET) < 0)
|
|
grub_util_error (_("cannot seek `%s': %s"), device, strerror (errno));
|
|
--
|
|
2.34.1
|
|
|