diff --git a/Kernel/lib.c b/Kernel/lib.c
index 472351cb164bb7f75caeec92de019be2619cce62..4d65108a24918473de524516d98df6b44381acfc 100644
--- a/Kernel/lib.c
+++ b/Kernel/lib.c
@@ -854,10 +854,14 @@ int CheckString(const char *String)
 
 /**
  * \brief Check if a sized memory region is valid memory
+ * \return Boolean success
  */
 int CheckMem(const void *Mem, int NumBytes)
 {
 	tVAddr	addr = (tVAddr)Mem;
+
+	if( !MM_GetPhysAddr( addr ) )
+		return 0;
 	
 	if( MM_IsUser( addr ) )
 	{
diff --git a/Kernel/syscalls.c b/Kernel/syscalls.c
index 7de7b15d5c9fef0c4ef80f7d9333346c2af802b7..9775be394ca919356499fb5f95a4f716467953d2 100644
--- a/Kernel/syscalls.c
+++ b/Kernel/syscalls.c
@@ -156,16 +156,19 @@ void SyscallHandler(tSyscallRegs *Regs)
 				CHECK_NUM_NONULL( &tmp[i], sizeof(char*) );
 				CHECK_STR_NONULL( tmp[i] );
 			}
+			if(ret == -1) break;
 			// Check EnvP also
 			// - EnvP can be NULL
 			if( Regs->Arg3 )
 			{
 				tmp = (char**)Regs->Arg3;
-				//Log("tmp = %p", tmp);
+				CHECK_NUM_NONULL(tmp, sizeof(char**));
+				Log("tmp = %p", tmp);
 				for(i=0;tmp[i];i++) {
-					CHECK_NUM_NULLOK( &tmp[i], sizeof(char*) );
+					CHECK_NUM_NONULL( &tmp[i], sizeof(char*) );
 					CHECK_STR_NONULL( tmp[i] );
 				}
+				if(ret == -1) break;
 			}
 		}
 		LEAVE('s', "Assuming 0");