From fd58225e2a0843406a541486492fdeba40043d44 Mon Sep 17 00:00:00 2001 From: "John Hodge (sonata)" Date: Sat, 19 Jan 2013 23:49:52 +0800 Subject: [PATCH] Kernel - Misc minor fixes --- KernelLand/Kernel/syscalls.c | 7 ++++--- KernelLand/Kernel/threads.c | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/KernelLand/Kernel/syscalls.c b/KernelLand/Kernel/syscalls.c index 1f2f7980..635f69ac 100644 --- a/KernelLand/Kernel/syscalls.c +++ b/KernelLand/Kernel/syscalls.c @@ -29,8 +29,8 @@ #define CHECK_STR_ARRAY(arr) do {\ int i;\ char **tmp = (char**)arr; \ - CHECK_NUM_NONULL( tmp, sizeof(char**) ); \ - for(i=0;tmp[i];i++) { \ + CHECK_NUM_NULLOK( tmp, sizeof(char**) ); \ + for(i=0;tmp&&tmp[i];i++) { \ CHECK_STR_NONULL( tmp[i] ); \ CHECK_NUM_NONULL( &tmp[i+1], sizeof(char*) ); \ }\ @@ -172,7 +172,8 @@ void SyscallHandler(tSyscallRegs *Regs) CHECK_STR_NONULL((const char*)Regs->Arg1); CHECK_STR_ARRAY((const char**)Regs->Arg2); CHECK_STR_ARRAY((const char**)Regs->Arg3); - CHECK_NUM_NULLOK((void*)Regs->Arg5, Regs->Arg4*sizeof(int)); + if( Regs->Arg4 > 0 ) + CHECK_NUM_NONULL((void*)Regs->Arg5, Regs->Arg4*sizeof(int)); ret = Proc_SysSpawn( (const char*)Regs->Arg1, (const char**)Regs->Arg2, (const char**)Regs->Arg3, Regs->Arg4, (int*)Regs->Arg5 diff --git a/KernelLand/Kernel/threads.c b/KernelLand/Kernel/threads.c index a8697d63..a86eba07 100644 --- a/KernelLand/Kernel/threads.c +++ b/KernelLand/Kernel/threads.c @@ -485,6 +485,7 @@ tTID Threads_WaitTID(int TID, int *Status) if(TID > 0) { tTID ret; + // NOTE: Race condition - Other child dies, desired child dies, first death is 'lost' while( (ret = Threads_WaitTID(-1, Status)) != TID ) { if( ret == -1 ) -- 2.20.1