Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:hellcp:flickerfree-boot
grub2
0010-efilinux-Fix-integer-overflows-in-grub_cmd...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0010-efilinux-Fix-integer-overflows-in-grub_cmd_initrd.patch of Package grub2
From 1fc593b372bfe9bba82f4c59236d5a0cffebd8e2 Mon Sep 17 00:00:00 2001 From: Colin Watson <cjwatson@debian.org> Date: Fri, 24 Jul 2020 17:18:09 +0100 Subject: [PATCH 10/11] efilinux: Fix integer overflows in grub_cmd_initrd These could be triggered by an extremely large number of arguments to the initrd command on 32-bit architectures, or a crafted filesystem with very large files on any architecture. Signed-off-by: Colin Watson <cjwatson@debian.org> --- grub-core/loader/i386/efi/linux.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/grub-core/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c index 652212227..6b06a8f2f 100644 --- a/grub-core/loader/i386/efi/linux.c +++ b/grub-core/loader/i386/efi/linux.c @@ -28,6 +28,8 @@ #include <grub/efi/efi.h> #include <grub/efi/linux.h> #include <grub/cpu/efi/memory.h> +#include <grub/tpm.h> +#include <grub/safemath.h> GRUB_MOD_LICENSE ("GPLv3+"); @@ -206,7 +208,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), goto fail; } - files = grub_zalloc (argc * sizeof (files[0])); + files = grub_calloc (argc, sizeof (files[0])); if (!files) goto fail; @@ -217,7 +219,11 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), if (! files[i]) goto fail; nfiles++; - size += ALIGN_UP (grub_file_size (files[i]), 4); + if (grub_add (size, ALIGN_UP (grub_file_size (files[i]), 4), &size)) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); + goto fail; + } } initrd_mem = kernel_alloc(size, N_("can't allocate initrd")); -- 2.31.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor