added 3 changesets to branch 'refs/remotes/xyzzy-github/x86_64' old head: d38f1301d1e3f4c56f6350b40be3275ceff478ee new head: 8a65fedaaaf8fd4b8ac2819ab81b4a4f47693905 ---------------------------------------------------------------------------- 6e06fa6: Added missing validity check on relocation address. 4ebc6df: Moved some 32-bit specific stuff to the 32 subdirectory. 8a65fed: Merge branch 'master' into x86_64 Conflicts: src/system/kernel/arch/x86/arch_debug.cpp [ Alex Smith <alex@xxxxxxxxxxxxxxxx> ] ---------------------------------------------------------------------------- 7 files changed, 32 insertions(+), 21 deletions(-) headers/private/kernel/arch/x86/bios.h | 4 +++ src/system/kernel/arch/x86/{ => 32}/apm.cpp | 0 src/system/kernel/arch/x86/{ => 32}/bios.cpp | 0 src/system/kernel/arch/x86/{ => 32}/vm86.cpp | 0 src/system/kernel/arch/x86/Jamfile | 6 ++-- src/system/kernel/arch/x86/arch_debug.cpp | 11 ++++---- src/system/kernel/arch/x86/arch_elf.cpp | 32 +++++++++++++--------- ############################################################################ Commit: 6e06fa6f7ea099cec5247fa2e8409c9c8ab3c983 Author: Alex Smith <alex@xxxxxxxxxxxxxxxx> Date: Thu Jul 12 13:06:29 2012 UTC Added missing validity check on relocation address. ---------------------------------------------------------------------------- diff --git a/src/system/kernel/arch/x86/arch_elf.cpp b/src/system/kernel/arch/x86/arch_elf.cpp index fee2673..111329a 100644 --- a/src/system/kernel/arch/x86/arch_elf.cpp +++ b/src/system/kernel/arch/x86/arch_elf.cpp @@ -25,6 +25,18 @@ #endif +#ifndef _BOOT_MODE +static bool +is_in_image(struct elf_image_info *image, addr_t address) +{ + return (address >= image->text_region.start + && address < image->text_region.start + image->text_region.size) + || (address >= image->data_region.start + && address < image->data_region.start + image->data_region.size); +} +#endif // !_BOOT_MODE + + #if !defined(__x86_64__) || defined(_BOOT_MODE) @@ -45,18 +57,6 @@ static const char *kRelocations[] = { #endif -#ifndef _BOOT_MODE -static bool -is_in_image(struct elf_image_info *image, addr_t address) -{ - return (address >= image->text_region.start - && address < image->text_region.start + image->text_region.size) - || (address >= image->data_region.start - && address < image->data_region.start + image->data_region.size); -} -#endif // !_BOOT_MODE - - #ifdef _BOOT_MODE status_t boot_arch_elf_relocate_rel(struct preloaded_elf32_image *image, @@ -255,13 +255,19 @@ arch_elf_relocate_rela(struct elf_image_info *image, relocValue = image->text_region.delta + rel[i].r_addend; break; default: - dprintf("arch_elf_relocate_rel: unhandled relocation type %d\n", + dprintf("arch_elf_relocate_rela: unhandled relocation type %d\n", type); return B_BAD_DATA; } #ifdef _BOOT_MODE boot_elf64_set_relocation(relocAddr, relocValue); #else + if (!is_in_image(image, relocAddr)) { + dprintf("arch_elf_relocate_rela: invalid offset %#lx\n", + rel[i].r_offset); + return B_BAD_ADDRESS; + } + *(Elf64_Addr *)relocAddr = relocValue; #endif } ############################################################################ Commit: 4ebc6dfa682fa199a88ec06f0930df04369f34ac Author: Alex Smith <alex@xxxxxxxxxxxxxxxx> Date: Thu Jul 12 13:23:55 2012 UTC Moved some 32-bit specific stuff to the 32 subdirectory. ---------------------------------------------------------------------------- diff --git a/headers/private/kernel/arch/x86/bios.h b/headers/private/kernel/arch/x86/bios.h index c88fe77..145f08f 100644 --- a/headers/private/kernel/arch/x86/bios.h +++ b/headers/private/kernel/arch/x86/bios.h @@ -9,6 +9,8 @@ #include <SupportDefs.h> +#ifndef __x86_64__ + #define BIOS32_PCI_SERVICE 'ICP$' struct bios32_service { @@ -29,4 +31,6 @@ status_t bios_init(void); } #endif +#endif /* __x86_64__ */ + #endif /* ARCH_x86_BIOS_H */ diff --git a/src/system/kernel/arch/x86/apm.cpp b/src/system/kernel/arch/x86/32/apm.cpp similarity index 100% rename from src/system/kernel/arch/x86/apm.cpp rename to src/system/kernel/arch/x86/32/apm.cpp diff --git a/src/system/kernel/arch/x86/bios.cpp b/src/system/kernel/arch/x86/32/bios.cpp similarity index 100% rename from src/system/kernel/arch/x86/bios.cpp rename to src/system/kernel/arch/x86/32/bios.cpp diff --git a/src/system/kernel/arch/x86/vm86.cpp b/src/system/kernel/arch/x86/32/vm86.cpp similarity index 100% rename from src/system/kernel/arch/x86/vm86.cpp rename to src/system/kernel/arch/x86/32/vm86.cpp diff --git a/src/system/kernel/arch/x86/Jamfile b/src/system/kernel/arch/x86/Jamfile index 8834924..2d41509 100644 --- a/src/system/kernel/arch/x86/Jamfile +++ b/src/system/kernel/arch/x86/Jamfile @@ -41,22 +41,22 @@ if $(TARGET_ARCH) = x86_64 { SEARCH_SOURCE += [ FDirName $(SUBDIR) paging pae ] ; archSpecificSources = + apm.cpp arch.S + bios.cpp cpuid.S int.cpp interrupts.S thread.cpp + vm86.cpp arch_commpage.cpp arch_debug.cpp arch_user_debugger.cpp - apm.cpp - bios.cpp ioapic.cpp irq_routing_table.cpp msi.cpp syscall.S - vm86.cpp x86_signals.cpp x86_signals_asm.S x86_syscalls.cpp ############################################################################ Commit: 8a65fedaaaf8fd4b8ac2819ab81b4a4f47693905 Author: Alex Smith <alex@xxxxxxxxxxxxxxxx> Date: Thu Jul 12 15:32:12 2012 UTC Merge branch 'master' into x86_64 Conflicts: src/system/kernel/arch/x86/arch_debug.cpp ----------------------------------------------------------------------------