* loader/multiboot_elfxx.c (grub_multiboot_load_elfXX) [__mips]: Check

64-bit address as signed on MIPS.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-05-31 20:23:51 +02:00
parent c7c75cf4cb
commit c837af3f38
2 changed files with 10 additions and 1 deletions

View file

@ -1,3 +1,8 @@
2010-05-31 Vladimir Serbinenko <phcoder@gmail.com>
* loader/multiboot_elfxx.c (grub_multiboot_load_elfXX) [__mips]: Check
64-bit address as signed on MIPS.
2010-05-28 Colin Watson <cjwatson@ubuntu.com> 2010-05-28 Colin Watson <cjwatson@ubuntu.com>
* configure.ac: AC_PROG_LEX sets LEX to ":" if lex is missing, not * configure.ac: AC_PROG_LEX sets LEX to ":" if lex is missing, not

View file

@ -74,7 +74,11 @@ CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, void *buffer)
if (ehdr->e_phoff + ehdr->e_phnum * ehdr->e_phentsize > MULTIBOOT_SEARCH) if (ehdr->e_phoff + ehdr->e_phnum * ehdr->e_phentsize > MULTIBOOT_SEARCH)
return grub_error (GRUB_ERR_BAD_OS, "program header at a too high offset"); return grub_error (GRUB_ERR_BAD_OS, "program header at a too high offset");
#ifdef MULTIBOOT_LOAD_ELF64 #if defined (MULTIBOOT_LOAD_ELF64) && defined (__mips)
/* We still in 32-bit mode. */
if (ehdr->e_entry < 0xffffffff80000000ULL)
return grub_error (GRUB_ERR_BAD_OS, "invalid entry point for ELF64");
#else
/* We still in 32-bit mode. */ /* We still in 32-bit mode. */
if (ehdr->e_entry > 0xffffffff) if (ehdr->e_entry > 0xffffffff)
return grub_error (GRUB_ERR_BAD_OS, "invalid entry point for ELF64"); return grub_error (GRUB_ERR_BAD_OS, "invalid entry point for ELF64");