aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2022-01-28 12:43:48 +0100
committerDaniel Kiper <daniel.kiper@oracle.com>2022-03-21 21:40:31 +0100
commit9381dbe045b39bd9395c9ab4276d95b4041ec9fb (patch)
tree997cfa21ffc3997afd8550d370d3e5c8ba60c6e4
parent62f0489aff002a44a72d390b42fc571e91378838 (diff)
downloadgrub-9381dbe045b39bd9395c9ab4276d95b4041ec9fb.tar.gz
term/efi/console: Do not set colorstate until the first text output
GRUB_MOD_INIT(normal) does an unconditional: grub_env_set ("color_normal", "light-gray/black"); which triggers a grub_term_setcolorstate() call. The original version of the "efi/console: Do not set text-mode until we actually need it" patch, https://lists.gnu.org/archive/html/grub-devel/2018-03/msg00125.html, protected against this by caching the requested state in grub_console_setcolorstate() and then only applying it when the first text output actually happens. During refactoring to move the grub_console_setcolorstate() up higher in the grub-core/term/efi/console.c file the code to cache the color-state + bail early was accidentally dropped. Restore the cache the color-state + bail early behavior from the original. Fixes: 2d7c3abd871f (efi/console: Do not set text-mode until we actually need it) Cc: Javier Martinez Canillas <javierm@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
-rw-r--r--grub-core/term/efi/console.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/grub-core/term/efi/console.c b/grub-core/term/efi/console.c
index 2f1ae85ba..c44b2ac31 100644
--- a/grub-core/term/efi/console.c
+++ b/grub-core/term/efi/console.c
@@ -82,6 +82,16 @@ grub_console_setcolorstate (struct grub_term_output *term
{
grub_efi_simple_text_output_interface_t *o;
+ if (grub_efi_is_finished || text_mode != GRUB_TEXT_MODE_AVAILABLE)
+ {
+ /*
+ * Cache colorstate changes before the first text-output, this avoids
+ * "color_normal" environment writes causing a switch to textmode.
+ */
+ text_colorstate = state;
+ return;
+ }
+
if (grub_efi_is_finished)
return;