From 48fb13aa3b7aff8f5b01d5be0b82921e83d1b265 Mon Sep 17 00:00:00 2001 From: David Given Date: Thu, 15 Oct 2015 23:04:18 +0200 Subject: [PATCH] Don't require EMAGIC and EMAGIC_2 to be defined. Align pointers correctly when writing an argument array. --- Kernel/syscall_exec16.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Kernel/syscall_exec16.c b/Kernel/syscall_exec16.c index 47aad708..7d02b8ec 100644 --- a/Kernel/syscall_exec16.c +++ b/Kernel/syscall_exec16.c @@ -76,8 +76,14 @@ char *envp[]; static int header_ok(uint8_t *pp) { register uint8_t *p = pp; - if (*p != EMAGIC && *p != EMAGIC_2) - return 0; + #if defined(EMAGIC) + if ((*p != EMAGIC) + #if defined(EMAGIC_2) + && (*p != EMAGIC_2) + #endif + ) + return 0; + #endif p += 3; if (*p++ != 'F' || *p++ != 'Z' || *p++ != 'X' || *p++ != '1') return 0; @@ -288,7 +294,7 @@ char **wargs(char *ptr, struct s_argblk *argbuf, int *cnt) // ptr is in userspac sptr = argbuf->a_buf; /* Move them into the users address space, at the very top */ - ptr -= (arglen = argbuf->a_arglen); + ptr -= (arglen = (int)alignup(argbuf->a_arglen, 2)); if (arglen) { uput(sptr, ptr, arglen); -- 2.34.1