Fixed bug where system would lock if a user task segfaulted (forgot to sti)
[tpg/acess2.git] / Kernel / syscalls.c
index facc263..5774dbe 100644 (file)
@@ -119,9 +119,20 @@ void SyscallHandler(tSyscallRegs *Regs)
        // Binary Control
        // ---
        case SYS_EXECVE:
+               if( !Syscall_ValidString(Regs->Arg1) ) {
+                       err = -EINVAL;
+                       ret = -1;
+                       break;
+               }
                ret = Proc_Execve((char*)Regs->Arg1, (char**)Regs->Arg2, (char**)Regs->Arg3);
                break;
        case SYS_LOADBIN:
+               if( !Syscall_ValidString(Regs->Arg1)
+               ||  !Syscall_Valid(sizeof(Uint), Regs->Arg2) ) {
+                       err = -EINVAL;
+                       ret = -1;
+                       break;
+               }
                ret = Binary_Load((char*)Regs->Arg1, (Uint*)Regs->Arg2);
                break;
        
@@ -129,6 +140,11 @@ void SyscallHandler(tSyscallRegs *Regs)
        // Virtual Filesystem
        // ---
        case SYS_OPEN:
+               if( !Syscall_ValidString(Regs->Arg1) ) {
+                       err = -EINVAL;
+                       ret = -1;
+                       break;
+               }
                ret = VFS_Open((char*)Regs->Arg1, Regs->Arg2 | VFS_OPENFLAG_USER);
                break;
        

UCC git Repository :: git.ucc.asn.au