From: Eric Sandeen <sandeen@sgi.com>
To: linux-kernel@vger.kernel.org, Andi Kleen <ak@suse.de>
Subject: [PATCH] stack overflow checking for x86_64 / 2.6
Date: Mon, 12 Jun 2006 13:33:07 -0500 [thread overview]
Message-ID: <448DB363.6060102@sgi.com> (raw)
This existed for x86_64 in 2.4, but seems to have gone AWOL in 2.6.
I've pretty much just copied this over from the 2.4 code, with appropriate tweaks for the 2.6
kernel, plus a bugfix. I'd personally rather see it printed out the way other arches do it, i.e.
bytes-remaining-until-overflow, rather than having to do the subtraction yourself. Also, only 128
bytes remaining seems awfully late to issue a warning. But I'll start here :)
Thanks,
-Eric
signed-off-by: Eric Sandeen <sandeen@sgi.com>
Index: linux-2.6.16/arch/x86_64/Kconfig.debug
===================================================================
--- linux-2.6.16.orig/arch/x86_64/Kconfig.debug 2006-03-19 23:53:29.000000000 -0600
+++ linux-2.6.16/arch/x86_64/Kconfig.debug 2006-06-09 16:15:58.991377500 -0500
@@ -35,6 +35,13 @@
Add a simple leak tracer to the IOMMU code. This is useful when you
are debugging a buggy device driver that leaks IOMMU mappings.
+config DEBUG_STACKOVERFLOW
+ bool "Check for stack overflows"
+ depends on DEBUG_KERNEL
+ help
+ This option will cause messages to be printed if free stack space
+ drops below a certain limit.
+
#config X86_REMOTE_DEBUG
# bool "kgdb debugging stub"
Index: linux-2.6.16/arch/x86_64/kernel/irq.c
===================================================================
--- linux-2.6.16.orig/arch/x86_64/kernel/irq.c 2006-06-09 16:14:55.991440250 -0500
+++ linux-2.6.16/arch/x86_64/kernel/irq.c 2006-06-12 13:04:59.226174500 -0500
@@ -26,6 +26,30 @@
#endif
#endif
+#ifdef CONFIG_DEBUG_STACKOVERFLOW
+/*
+ * Probalistic stack overflow check:
+ *
+ * Only check the stack in process context, because everything else
+ * runs on the big interrupt stacks. Checking reliably is too expensive,
+ * so we just check from interrupts.
+ */
+static inline void stack_overflow_check(struct pt_regs *regs)
+{
+ u64 curbase = (u64) current->thread_info;
+ static unsigned long warned = -60*HZ;
+
+ if (regs->rsp >= curbase && regs->rsp <= curbase + THREAD_SIZE &&
+ regs->rsp < curbase + sizeof(struct thread_info) + 128 &&
+ time_after(jiffies, warned + 60*HZ)) {
+ printk("do_IRQ: %s near stack overflow (cur:%Lx,rsp:%lx)\n",
+ current->comm, curbase, regs->rsp);
+ show_stack(NULL,NULL);
+ warned = jiffies;
+ }
+}
+#endif
+
/*
* Generic, controller-independent functions:
*/
@@ -96,7 +120,9 @@
exit_idle();
irq_enter();
-
+#ifdef CONFIG_DEBUG_STACKOVERFLOW
+ stack_overflow_check(regs);
+#endif
__do_IRQ(irq, regs);
irq_exit();
next reply other threads:[~2006-06-12 18:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-12 18:33 Eric Sandeen [this message]
2006-06-13 7:06 ` [PATCH] stack overflow checking for x86_64 / 2.6 Andi Kleen
2006-06-13 13:49 ` Eric Sandeen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=448DB363.6060102@sgi.com \
--to=sandeen@sgi.com \
--cc=ak@suse.de \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.