[PATCH] 2.5.59: show_task() oops

From: Russell King (rmk@arm.linux.org.uk)
Date: Sat Jan 18 2003 - 11:56:57 EST


show_task() attempts to calculate the amount of free space which hasn't
been written to on the kernel stack by reading from the base of the
kernel stack upwards.

However, it mistakenly uses the task_struct pointer as the base of the
stack, which it isn't, and this can cause an oops.

Here is a patch which uses the task thread pointer instead, which should
be located at the bottom of the kernel stack. It appears this was missed
when the thread structure was introduced.

--- orig/kernel/sched.c Fri Jan 17 10:39:25 2003
+++ linux/kernel/sched.c Sat Jan 18 14:01:39 2003
@@ -2057,7 +2057,7 @@
                 printk(" %016lx ", thread_saved_pc(p));
 #endif
         {
- unsigned long * n = (unsigned long *) (p+1);
+ unsigned long * n = (unsigned long *) (p->thread_info+1);
                 while (!*n)
                         n++;
                 free = (unsigned long) n - (unsigned long)(p+1);

--
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Jan 23 2003 - 22:00:19 EST