From: Steve McIntyre <steve@einval.com>
To: The development of GNU GRUB <grub-devel@gnu.org>
Cc: daniel.kiper@oracle.com, Chris Coulson <chris.coulson@canonical.com>
Subject: Re: [PATCH] font: Try opening fonts from the bundled memdisk
Date: Wed, 26 Apr 2023 11:28:37 +0100 [thread overview]
Message-ID: <20230426102826.GE812714@tack.einval.com> (raw)
In-Reply-To: <20230426100652.150775-1-chris.coulson@canonical.com>
We're running with this patch in Debian builds right now and it's
working well...
Reviewed-by: Steve McIntyre <93sam@debian.org>
Tested-by: Steve McIntyre <93sam@debian.org>
(whichever you prefer!)
On Wed, Apr 26, 2023 at 12:06:52PM +0200, Chris Coulson wrote:
>Grub since 93a786a00163e50c29f0394df198518617e1c9a5 has enforced
>verification of font files in secure boot mode. In order to continue to
>be able to load some default fonts, vendors may bundle them with their
>signed EFI image by adding them to the built-in memdisk.
>
>This change makes the font loader try loading fonts from the memdisk
>before the prefix path when attempting to load a font file by specifying
>its filename, which avoids having to make changes to grub configurations
>in order to accommodate memdisk bundled fonts. It expects the directory
>structure to be the same as fonts stored in the prefix path
>(ie, /fonts/<name>.pf2).
>
>Signed-off-by: Chris Coulson <chris.coulson@canonical.com>
>---
> grub-core/font/font.c | 48 ++++++++++++++++++++++++++++---------------
> 1 file changed, 31 insertions(+), 17 deletions(-)
>
>diff --git a/grub-core/font/font.c b/grub-core/font/font.c
>index 24adcb35a..7c83467a3 100644
>--- a/grub-core/font/font.c
>+++ b/grub-core/font/font.c
>@@ -415,6 +415,27 @@ read_section_as_short (struct font_file_section *section,
> return 0;
> }
>
>+static grub_file_t
>+try_open_from_prefix (const char *prefix, const char *filename)
>+{
>+ grub_file_t file;
>+ char *fullname, *ptr;
>+
>+ fullname = grub_malloc (grub_strlen (prefix) + grub_strlen (filename) + 1
>+ + sizeof ("/fonts/") + sizeof (".pf2"));
>+ if (!fullname)
>+ return 0;
>+ ptr = grub_stpcpy (fullname, prefix);
>+ ptr = grub_stpcpy (ptr, "/fonts/");
>+ ptr = grub_stpcpy (ptr, filename);
>+ ptr = grub_stpcpy (ptr, ".pf2");
>+ *ptr = 0;
>+
>+ file = grub_buffile_open (fullname, GRUB_FILE_TYPE_FONT, 1024);
>+ grub_free (fullname);
>+ return file;
>+}
>+
> /* Load a font and add it to the beginning of the global font list.
> Returns 0 upon success, nonzero upon failure. */
> grub_font_t
>@@ -433,25 +454,18 @@ grub_font_load (const char *filename)
> file = grub_buffile_open (filename, GRUB_FILE_TYPE_FONT, 1024);
> else
> {
>- const char *prefix = grub_env_get ("prefix");
>- char *fullname, *ptr;
>- if (!prefix)
>+ file = try_open_from_prefix ("(memdisk)", filename);
>+ if (!file)
> {
>- grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"),
>- "prefix");
>- goto fail;
>+ const char *prefix = grub_env_get ("prefix");
>+ if (!prefix)
>+ {
>+ grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"),
>+ "prefix");
>+ goto fail;
>+ }
>+ file = try_open_from_prefix (prefix, filename);
> }
>- fullname = grub_malloc (grub_strlen (prefix) + grub_strlen (filename) + 1
>- + sizeof ("/fonts/") + sizeof (".pf2"));
>- if (!fullname)
>- goto fail;
>- ptr = grub_stpcpy (fullname, prefix);
>- ptr = grub_stpcpy (ptr, "/fonts/");
>- ptr = grub_stpcpy (ptr, filename);
>- ptr = grub_stpcpy (ptr, ".pf2");
>- *ptr = 0;
>- file = grub_buffile_open (fullname, GRUB_FILE_TYPE_FONT, 1024);
>- grub_free (fullname);
> }
> if (!file)
> goto fail;
>--
>2.39.2
>
>
>_______________________________________________
>Grub-devel mailing list
>Grub-devel@gnu.org
>https://lists.gnu.org/mailman/listinfo/grub-devel
--
Steve McIntyre, Cambridge, UK. steve@einval.com
'There is some grim amusement in watching Pence try to run the typical
"politician in the middle of a natural disaster" playbook, however
incompetently, while Trump scribbles all over it in crayon and eats some
of the pages.' -- Russ Allbery
next prev parent reply other threads:[~2023-04-26 10:29 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-26 10:06 [PATCH] font: Try opening fonts from the bundled memdisk Chris Coulson
2023-04-26 10:28 ` Steve McIntyre [this message]
2023-04-26 11:56 ` Robbie Harwood
2023-04-28 13:43 ` Daniel Kiper
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230426102826.GE812714@tack.einval.com \
--to=steve@einval.com \
--cc=chris.coulson@canonical.com \
--cc=daniel.kiper@oracle.com \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.