efi: properly terminate filepath with NULL in chainloader (FS#52412)
This commit is contained in:
parent
e549f1286c
commit
d7aa3a8e10
@ -0,0 +1,44 @@
|
|||||||
|
From ce95549cc54b5d6f494608a7c390dba3aab4fba7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||||
|
Date: Thu, 15 Dec 2016 16:07:00 +0300
|
||||||
|
Subject: efi: properly terminate filepath with NULL in chainloader
|
||||||
|
|
||||||
|
EFI File Path Media Device Path is defined as NULL terminated string;
|
||||||
|
but chainloader built file paths without final NULL. This caused error
|
||||||
|
with Secure Boot and Linux Foundation PreLoader on Acer with InsydeH20 BIOS.
|
||||||
|
Apparently firmware failed verification with EFI_INVALID_PARAMETER which is
|
||||||
|
considered fatal error by PreLoader.
|
||||||
|
|
||||||
|
Reported and tested by Giovanni Santini <itachi.sama.amaterasu@gmail.com>
|
||||||
|
---
|
||||||
|
grub-core/loader/efi/chainloader.c | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c
|
||||||
|
index 522a716..adc8563 100644
|
||||||
|
--- a/grub-core/loader/efi/chainloader.c
|
||||||
|
+++ b/grub-core/loader/efi/chainloader.c
|
||||||
|
@@ -122,6 +122,8 @@ copy_file_path (grub_efi_file_path_device_path_t *fp,
|
||||||
|
if (*p == '/')
|
||||||
|
*p = '\\';
|
||||||
|
|
||||||
|
+ /* File Path is NULL terminated */
|
||||||
|
+ fp->path_name[size++] = '\0';
|
||||||
|
fp->header.length = size * sizeof (grub_efi_char16_t) + sizeof (*fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -156,8 +158,10 @@ make_file_path (grub_efi_device_path_t *dp, const char *filename)
|
||||||
|
d = GRUB_EFI_NEXT_DEVICE_PATH (d);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* File Path is NULL terminated. Allocate space for 2 extra characters */
|
||||||
|
+ /* FIXME why we split path in two components? */
|
||||||
|
file_path = grub_malloc (size
|
||||||
|
- + ((grub_strlen (dir_start) + 1)
|
||||||
|
+ + ((grub_strlen (dir_start) + 2)
|
||||||
|
* GRUB_MAX_UTF16_PER_UTF8
|
||||||
|
* sizeof (grub_efi_char16_t))
|
||||||
|
+ sizeof (grub_efi_file_path_device_path_t) * 2);
|
||||||
|
--
|
||||||
|
cgit v1.0
|
||||||
|
|
8
PKGBUILD
8
PKGBUILD
@ -23,7 +23,7 @@ _UNIFONT_VER="6.3.20131217"
|
|||||||
pkgname="grub"
|
pkgname="grub"
|
||||||
pkgdesc="GNU GRand Unified Bootloader (2)"
|
pkgdesc="GNU GRand Unified Bootloader (2)"
|
||||||
pkgver=2.02.beta3
|
pkgver=2.02.beta3
|
||||||
pkgrel=4
|
pkgrel=5
|
||||||
epoch=1
|
epoch=1
|
||||||
url="https://www.gnu.org/software/grub/"
|
url="https://www.gnu.org/software/grub/"
|
||||||
arch=('x86_64' 'i686')
|
arch=('x86_64' 'i686')
|
||||||
@ -64,6 +64,7 @@ source=("grub-${_pkgver}::git+git://git.sv.gnu.org/grub.git#tag=${_GRUB_GIT_TAG}
|
|||||||
'0003-10_linux-detect-archlinux-initramfs.patch'
|
'0003-10_linux-detect-archlinux-initramfs.patch'
|
||||||
'0004-add-GRUB_COLOR_variables.patch'
|
'0004-add-GRUB_COLOR_variables.patch'
|
||||||
'0005-10_linux-fix-grouping-of-tests.patch'
|
'0005-10_linux-fix-grouping-of-tests.patch'
|
||||||
|
'0006-efi-properly-terminate-filepath-with-NULL-in-chainloader.patch'
|
||||||
'grub.default'
|
'grub.default'
|
||||||
'grub.cfg')
|
'grub.cfg')
|
||||||
|
|
||||||
@ -76,6 +77,7 @@ sha256sums=('SKIP'
|
|||||||
'b41e4438319136b5e74e0abdfcb64ae115393e4e15207490272c425f54026dd3'
|
'b41e4438319136b5e74e0abdfcb64ae115393e4e15207490272c425f54026dd3'
|
||||||
'a5198267ceb04dceb6d2ea7800281a42b3f91fd02da55d2cc9ea20d47273ca29'
|
'a5198267ceb04dceb6d2ea7800281a42b3f91fd02da55d2cc9ea20d47273ca29'
|
||||||
'bf712de689a944ac23a0303bbcc223eedf8d4fcb5c94bdc071c71c2444158a7f'
|
'bf712de689a944ac23a0303bbcc223eedf8d4fcb5c94bdc071c71c2444158a7f'
|
||||||
|
'd99f47642d325398873346e25ecb646c387e358e25b05128fa333cc7721a7388'
|
||||||
'df764fbd876947dea973017f95371e53833bf878458140b09f0b70d900235676'
|
'df764fbd876947dea973017f95371e53833bf878458140b09f0b70d900235676'
|
||||||
'c5e4f3836130c6885e9273c21f057263eba53f4b7c0e2f111f6e5f2e487a47ad')
|
'c5e4f3836130c6885e9273c21f057263eba53f4b7c0e2f111f6e5f2e487a47ad')
|
||||||
|
|
||||||
@ -109,6 +111,10 @@ prepare() {
|
|||||||
patch -Np1 -i "${srcdir}/0005-10_linux-fix-grouping-of-tests.patch"
|
patch -Np1 -i "${srcdir}/0005-10_linux-fix-grouping-of-tests.patch"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
msg "Patch to properly terminate filepath with NULL in chainloader"
|
||||||
|
patch -Np1 -i "${srcdir}/0006-efi-properly-terminate-filepath-with-NULL-in-chainloader.patch"
|
||||||
|
echo
|
||||||
|
|
||||||
msg "Fix DejaVuSans.ttf location so that grub-mkfont can create *.pf2 files for starfield theme"
|
msg "Fix DejaVuSans.ttf location so that grub-mkfont can create *.pf2 files for starfield theme"
|
||||||
sed 's|/usr/share/fonts/dejavu|/usr/share/fonts/dejavu /usr/share/fonts/TTF|g' -i "${srcdir}/grub-${_pkgver}/configure.ac"
|
sed 's|/usr/share/fonts/dejavu|/usr/share/fonts/dejavu /usr/share/fonts/TTF|g' -i "${srcdir}/grub-${_pkgver}/configure.ac"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user