From 3f1c5c1d7762ded8a51af3ebe382c84e299aad73 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Fri, 16 Oct 2015 07:11:45 +0200 Subject: [PATCH] add check, if the system starts a valid HermitCore executable --- hermit/arch/x86/kernel/tasks.c | 12 ++++++++++++ hermit/usr/newlib | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/hermit/arch/x86/kernel/tasks.c b/hermit/arch/x86/kernel/tasks.c index 0108a7c33..2b71c04fa 100644 --- a/hermit/arch/x86/kernel/tasks.c +++ b/hermit/arch/x86/kernel/tasks.c @@ -237,6 +237,7 @@ static int load_task(load_args_t* largs) fildes_t file; task_t* curr_task = per_core(current_task); int ret = -EINVAL; + uint8_t hermit_exec = 0; if (!largs) return -EINVAL; @@ -386,6 +387,10 @@ static int load_task(load_args_t* largs) curr_task->tls_mem_size = prog_header.mem_size; curr_task->tls_file_size = prog_header.file_size; break; + case ELF_PT_NOTE: + //kprintf("Found note segment: %s\n", (char*)prog_header.virt_addr + 12); + hermit_exec |= (strcmp((char*)prog_header.virt_addr + 12, "HermitCore") == 0); + break; default: kprintf("Unknown type 0x%lx in program header\n", prog_header.type); } @@ -411,6 +416,13 @@ static int load_task(load_args_t* largs) goto Lerr; } + if (BUILTIN_EXPECT(!hermit_exec, 0)) { + kprintf("Not a valid executable!\n"); + ret = -EINVAL; + goto Lerr; + + } + offset = DEFAULT_STACK_SIZE-16; // do we have to create a TLS segement? diff --git a/hermit/usr/newlib b/hermit/usr/newlib index dbabb39f3..d19417c7d 160000 --- a/hermit/usr/newlib +++ b/hermit/usr/newlib @@ -1 +1 @@ -Subproject commit dbabb39f3d0aa730ca0bc8b735e05206f0de1d16 +Subproject commit d19417c7db857c7f16728933aa42fdd9eb7a8051