[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH] kernel2: Panic im Int-Handler, falls isf nicht auf kernel-Stack
! kernel2: Wenn im Kernel beispielsweise erst current_thread angepasst
wird, und danach direkt ein yield ausgefuehrt wird, kann das
dazu fuehren, dass ein Thread einen falschen kernel-Stack
benutzt. Statt dann einfach irgendwann mit seltsamen Meldungen
abzustuerzen loesen wir lieber einen Panic aus.
Signed-off-by: Antoine Kaufmann <toni@xxxxxxxxxx>
---
src/kernel2/src/interrupts/im.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/src/kernel2/src/interrupts/im.c b/src/kernel2/src/interrupts/im.c
index 57e260f..770f351 100644
--- a/src/kernel2/src/interrupts/im.c
+++ b/src/kernel2/src/interrupts/im.c
@@ -135,6 +135,15 @@ interrupt_stack_frame_t* im_handler(interrupt_stack_frame_t* isf)
pm_thread_t* old_thread = thread;
uint8_t int_num = isf->interrupt_number;
interrupt_stack_frame_t* new_isf = isf;
+ uintptr_t isf_addr = (uintptr_t) isf;
+
+ if ((isf_addr < (uintptr_t) thread->kernel_stack_bottom) ||
+ (isf_addr >=
+ ((uintptr_t) thread->kernel_stack_bottom + thread->kernel_stack_size)))
+ {
+ panic("Stackframe von Interrupt liegt ausserhalb des Kernelstacks des "
+ "aktuellen Threads. (pm_scheduler_yield() nach Thread-Wechsel?)");
+ }
// Wenn der Int aus dem Userspace kommt, legen wir den zugehoerigen ISF ab
if (isf->cs != 0x8) {
--
1.6.4.4