[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Lost] [Patch 1/3] Falsche RPCs benutzerfreundlicher abbrechen



* kernel: abort_task gibt den Namen des beendeten Tasks aus
* kernel: RPC zu unbekanntem Prozess wird vorher abgefangen, so daÃ? die Ziel-PID bekannt ist und ausgegeben werden kann
! kernel: Nach Fehlern in der RPC-Prüfung sollte man auch abbrechen
Index: trunk/src/kernel/src/syscall.c
===================================================================
--- trunk.orig/src/kernel/src/syscall.c	2008-04-20 13:29:32.000000000 +0200
+++ trunk/src/kernel/src/syscall.c	2008-04-20 13:30:58.000000000 +0200
@@ -659,21 +659,30 @@
 
         case SYSCALL_FASTRPC:
         {
-            struct task* callee = get_task(*((dword*) isf->esp));
-
             dword metadata_size = *((dword*) (isf->esp + 4));
             void* metadata = *((void**) (isf->esp + 8));
             dword data_size = *((dword*) (isf->esp + 12));
             void* data = *((void**) (isf->esp + 16));
 
+            dword callee_pid = *((dword*) isf->esp);
+            struct task* callee = get_task(callee_pid);
+
+            if (!callee) {
+                abort_task("SYSCALL_FASTRPC: RPC zu unbekanntem Prozess %d)",
+                    callee_pid);
+                break;
+            }
+
             if (!is_userspace(metadata, metadata_size)) {
                 abort_task("SYSCALL_FASTRPC: Ungueltige Metadaten (%08x)",
                     (dword) metadata);
+                break;
             }
             
             if (!is_userspace(data, data_size)) {
                 abort_task("SYSCALL_FASTRPC: Ungueltige Daten (%08x)",
                     (dword) data);
+                break;
             }
 
             isf->eax = 0;
Index: trunk/src/kernel/src/task.c
===================================================================
--- trunk.orig/src/kernel/src/task.c	2008-04-20 13:31:33.000000000 +0200
+++ trunk/src/kernel/src/task.c	2008-04-20 13:34:55.000000000 +0200
@@ -385,9 +385,13 @@
 {
     int * args = ((int*)&format) + 1;
 
-    kprintf("\n"
-      "\033[1;37m\033[41m" // weiss auf rot
-      "Task %d beendet: ", current_task->pid);
+    kprintf("\n\033[1;37m\033[41m" // weiss auf rot
+        "Task %d beendet: %s\n", 
+        current_task->pid,
+        current_task->cmdline != NULL 
+            ? current_task->cmdline 
+            : "Unbekannter Task"
+        );
     kaprintf(format, &args);
     kprintf("\n\033[0;37m\033[40m");
         

--