[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");
--