diff --git a/headers/private/kernel/arch/arm/arch_kernel.h b/headers/private/kernel/arch/arm/arch_kernel.h index 766ab42b10..9c8723bc19 100644 --- a/headers/private/kernel/arch/arm/arch_kernel.h +++ b/headers/private/kernel/arch/arm/arch_kernel.h @@ -9,7 +9,7 @@ // memory layout #define KERNEL_BASE 0x80000000 -#define KERNEL_SIZE 0x80000000 +#define KERNEL_SIZE 0x800000 #define KERNEL_TOP (KERNEL_BASE + (KERNEL_SIZE - 1)) /* diff --git a/src/system/boot/arch/arm/arch_mmu.cpp b/src/system/boot/arch/arm/arch_mmu.cpp index 758a1f352c..7e2f44a059 100644 --- a/src/system/boot/arch/arm/arch_mmu.cpp +++ b/src/system/boot/arch/arm/arch_mmu.cpp @@ -59,7 +59,7 @@ TODO: // 8 MB for the kernel, kernel args, modules, driver settings, ... -static const size_t kMaxKernelSize = 0x800000; +static const size_t kMaxKernelSize = KERNEL_SIZE; // Base address for loader static const size_t kLoaderBaseAddress = KERNEL_LOAD_BASE + kMaxKernelSize; diff --git a/src/system/kernel/arch/arm/arch_debug.cpp b/src/system/kernel/arch/arm/arch_debug.cpp index 1832ca2962..985ce7c383 100644 --- a/src/system/kernel/arch/arm/arch_debug.cpp +++ b/src/system/kernel/arch/arm/arch_debug.cpp @@ -56,19 +56,18 @@ already_visited(uint32 *visited, int32 *_last, int32 *_num, uint32 fp) static status_t get_next_frame(addr_t fp, addr_t *next, addr_t *ip) { - if (fp != 0) { - addr_t _fp = *(((addr_t*)fp) -3); - addr_t _sp = *(((addr_t*)fp) -2); - addr_t _lr = *(((addr_t*)fp) -1); - addr_t _pc = *(((addr_t*)fp) -0); + addr_t _fp = *(((addr_t*)fp) -3); + addr_t _sp = *(((addr_t*)fp) -2); + addr_t _lr = *(((addr_t*)fp) -1); + addr_t _pc = *(((addr_t*)fp) -0); - *ip = (_fp != 0) ? _lr : _pc; - *next = _fp; - - return B_OK; + if (_lr > KERNEL_TOP) { + return B_BAD_ADDRESS; } + *ip = (_fp != 0) ? _lr : _pc; + *next = _fp; - return B_BAD_VALUE; + return B_OK; }