summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYi Zhao <yi.zhao@windriver.com>2021-01-08 09:01:29 +0800
committerJia Zhang <zhang.jia@linux.alibaba.com>2021-01-19 17:44:02 +0800
commit2d1fb96206acfd5b85084304af1760a4f598741a (patch)
treeca6fb35d30a32280dd8b37f3c817dd08d213df72
parentf1447e38968d116f5ea0a331ca0d5ec64ebc57c8 (diff)
downloadmeta-secure-core-2d1fb96206acfd5b85084304af1760a4f598741a.tar.gz
grub: fix the file not found error when sysmlink filesize is 60
We encountered a file not found error when the symlink filesize is 60: $ ls -l initrd lrwxrwxrwx 1 root root 60 Jan 6 16:37 initrd -> secure-core-image-initramfs-5.10.2-yoctodev-standard.cpio.gz When booting, we got the following error in grub: error: file `/initrd' not found The root cause is although the size of diro->inode.symlink is 60, it includes the trailing '\0'. So if the symlink filesize is exactly 60, it is also stored in a separate block rather than in the inode. Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
-rw-r--r--meta-efi-secure-boot/recipes-bsp/grub/grub-efi-efi-secure-boot.inc1
-rw-r--r--meta-efi-secure-boot/recipes-bsp/grub/grub-efi/0001-fs-ext2-fix-the-file-not-found-error-when-symlink-fi.patch40
2 files changed, 41 insertions, 0 deletions
diff --git a/meta-efi-secure-boot/recipes-bsp/grub/grub-efi-efi-secure-boot.inc b/meta-efi-secure-boot/recipes-bsp/grub/grub-efi-efi-secure-boot.inc
index c944207..6feee6c 100644
--- a/meta-efi-secure-boot/recipes-bsp/grub/grub-efi-efi-secure-boot.inc
+++ b/meta-efi-secure-boot/recipes-bsp/grub/grub-efi-efi-secure-boot.inc
@@ -26,6 +26,7 @@ SRC_URI += "\
26 file://Grub-get-and-set-efi-variables.patch \ 26 file://Grub-get-and-set-efi-variables.patch \
27 file://uefi_verify.patch \ 27 file://uefi_verify.patch \
28 file://0001-grub-verify-Add-strict_security-variable.patch \ 28 file://0001-grub-verify-Add-strict_security-variable.patch \
29 file://0001-fs-ext2-fix-the-file-not-found-error-when-symlink-fi.patch \
29 file://grub-efi.cfg \ 30 file://grub-efi.cfg \
30 file://boot-menu.inc \ 31 file://boot-menu.inc \
31 ${@d.getVar('GRUB_MOKVERIFY_PATCH', True) if d.getVar('UEFI_SELOADER', True) == '1' else ''} \ 32 ${@d.getVar('GRUB_MOKVERIFY_PATCH', True) if d.getVar('UEFI_SELOADER', True) == '1' else ''} \
diff --git a/meta-efi-secure-boot/recipes-bsp/grub/grub-efi/0001-fs-ext2-fix-the-file-not-found-error-when-symlink-fi.patch b/meta-efi-secure-boot/recipes-bsp/grub/grub-efi/0001-fs-ext2-fix-the-file-not-found-error-when-symlink-fi.patch
new file mode 100644
index 0000000..a9b3693
--- /dev/null
+++ b/meta-efi-secure-boot/recipes-bsp/grub/grub-efi/0001-fs-ext2-fix-the-file-not-found-error-when-symlink-fi.patch
@@ -0,0 +1,40 @@
1From 5fe53d80b7294198687a96e72471ddb968c7de34 Mon Sep 17 00:00:00 2001
2From: Yi Zhao <yi.zhao@windriver.com>
3Date: Wed, 6 Jan 2021 17:07:26 +0800
4Subject: [PATCH] fs/ext2: fix the file not found error when symlink filesize
5 is 60
6
7We encountered a file not found error when the symlink filesize is 60:
8$ ls -l initrd
9lrwxrwxrwx 1 root root 60 Jan 6 16:37 initrd -> secure-core-image-initramfs-5.10.2-yoctodev-standard.cpio.gz
10
11When booting, we got the following error in grub:
12error: file `/initrd' not found
13
14The root cause is although the size of diro->inode.symlink is 60, it
15includes the trailing '\0'. So if the symlink filesize is exactly 60, it
16is also stored in a separate block rather than in the inode.
17
18Upstream-Status: Submitted [https://lists.gnu.org/archive/html/grub-devel/2021-01/msg00018.html]
19
20Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
21---
22 grub-core/fs/ext2.c | 2 +-
23 1 file changed, 1 insertion(+), 1 deletion(-)
24
25diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c
26index ac33bcd68..cb5058e8b 100644
27--- a/grub-core/fs/ext2.c
28+++ b/grub-core/fs/ext2.c
29@@ -732,7 +732,7 @@ grub_ext2_read_symlink (grub_fshelp_node_t node)
30 /* If the filesize of the symlink is bigger than
31 60 the symlink is stored in a separate block,
32 otherwise it is stored in the inode. */
33- if (grub_le_to_cpu32 (diro->inode.size) <= sizeof (diro->inode.symlink))
34+ if (grub_le_to_cpu32 (diro->inode.size) < sizeof (diro->inode.symlink))
35 grub_memcpy (symlink,
36 diro->inode.symlink,
37 grub_le_to_cpu32 (diro->inode.size));
38--
392.25.1
40