| From 1641d74e16f9d1ca35ba1a87ee4a0bf3afa48e72 Mon Sep 17 00:00:00 2001 |
| From: Darren Kenny <darren.kenny@oracle.com> |
| Date: Fri, 4 Dec 2020 15:04:28 +0000 |
| Subject: [PATCH] util/glue-efi: Fix incorrect use of a possibly negative value |
| |
| It is possible for the ftell() function to return a negative value, |
| although it is fairly unlikely here, we should be checking for |
| a negative value before we assign it to an unsigned value. |
| |
| Fixes: CID 73744 |
| |
| Signed-off-by: Darren Kenny <darren.kenny@oracle.com> |
| Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com> |
| Signed-off-by: Stefan SΓΈrensen <stefan.sorensen@spectralink.com> |
| --- |
| util/glue-efi.c | 14 ++++++++++++-- |
| 1 file changed, 12 insertions(+), 2 deletions(-) |
| |
| diff --git a/util/glue-efi.c b/util/glue-efi.c |
| index 68f5316..de0fa6d 100644 |
| --- a/util/glue-efi.c |
| +++ b/util/glue-efi.c |
| @@ -39,13 +39,23 @@ write_fat (FILE *in32, FILE *in64, FILE *out, const char *out_filename, |
| struct grub_macho_fat_header head; |
| struct grub_macho_fat_arch arch32, arch64; |
| grub_uint32_t size32, size64; |
| + long size; |
| char *buf; |
| |
| fseek (in32, 0, SEEK_END); |
| - size32 = ftell (in32); |
| + size = ftell (in32); |
| + if (size < 0) |
| + grub_util_error ("cannot get end of input file '%s': %s", |
| + name32, strerror (errno)); |
| + size32 = (grub_uint32_t) size; |
| fseek (in32, 0, SEEK_SET); |
| + |
| fseek (in64, 0, SEEK_END); |
| - size64 = ftell (in64); |
| + size = ftell (in64); |
| + if (size < 0) |
| + grub_util_error ("cannot get end of input file '%s': %s", |
| + name64, strerror (errno)); |
| + size64 = (grub_uint64_t) size; |
| fseek (in64, 0, SEEK_SET); |
| |
| head.magic = grub_cpu_to_le32_compile_time (GRUB_MACHO_FAT_EFI_MAGIC); |
| -- |
| 2.14.2 |
| |