Messages in this thread | | | Date | Tue, 22 Apr 2008 10:44:04 +0200 | From | Ingo Molnar <> | Subject | Re: [PATCH] use canary at end of stack to indicate overruns at oops time |
| |
* Eric Sandeen <sandeen@redhat.com> wrote:
> Use a canary at the end of the stack to clearly indicate at oops time > whether the stack has ever overflowed. > > This is a very simple implementation with a couple of drawbacks: > > 1) a thread may legitimately use exactly up to the last > word on the stack > > -- but the chances of doing this and then oopsing later seem slim
even that narrow case is a bug - an NMI might arrive at exactly that point and overflow the stack for real.
> 2) it's possible that the stack usage isn't dense enough > that the canary location could get skipped over > > -- but the worst that happens is that we don't flag the overrun
yeah.
> With the code in place, an intentionally-bloated stack oops does: > > BUG: unable to handle kernel paging request at ffff8103f84cc680 > IP: [<ffffffff810253df>] update_curr+0x9a/0xa8 > PGD 8063 PUD 0 > Thread overran stack or stack corrupted > Oops: 0000 [1] SMP > CPU 0 > ...
excellent. I've queued this up, it's definitely an improvement in debuggability.
we used to have something comparable in ancient kernels (it was called the stack red zone IIRC) - but it was not printed in oopses and we lost the feature somewhere anyway.
Ingo
| |