Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Michael Snyder <msnyder@specifix.com>
To: Mark Kettenis <mark.kettenis@xs4all.nl>
Cc: drow@false.org, gdb-patches@sourceware.org
Subject: Re: RFA: Fix check for no-saved-pc
Date: Tue, 04 Dec 2007 23:25:00 -0000	[thread overview]
Message-ID: <1196809890.2501.287.camel@localhost.localdomain> (raw)
In-Reply-To: <200712041805.lB4I5KsC028209@brahms.sibelius.xs4all.nl>

On Tue, 2007-12-04 at 19:05 +0100, Mark Kettenis wrote:
> > From: Michael Snyder <msnyder@specifix.com>
> > Date: Fri, 30 Nov 2007 17:37:24 -0800
> > 
> > On Fri, 2007-11-30 at 18:00 -0500, Daniel Jacobowitz wrote:
> > > On Fri, Nov 30, 2007 at 02:40:31PM -0800, Michael Snyder wrote:
> > > > There's a check in get_prev_frame to see if the next saved pc
> > > > is zero.  I think it has an off-by-one error, and is checking 
> > > > for the pc of the wrong frame.
> > > 
> > > Mark K. and I have had roughly a month's worth of discussion on this
> > > check over the last two years; it's where it is on purpose.  Here's
> > > the last conversation:
> > > 
> > >   http://sourceware.org/ml/gdb-patches/2006-05/msg00196.html
> > >   http://sourceware.org/ml/gdb-patches/2006-07/msg00296.html
> > 
> > All right.  Then let's leave that test alone, and add another
> > test, much later on, to detect and report this situation.
> > 
> > Here's my revised patch.  Testsuites un-affected.
> > 
> > As before, the effect of this change is to have gdb print
> > a more informative message instead of a meaningless zero-frame.
> 
> It's not meaningless; it's a very valuable hint that the stack has been
> corrupted. 

My poor choice of words.  What I meant was more like, one is a
"hint" and the other is an explicit statement.  A person does
not need to know what this hint means if gdb tells them
explicitly.


>  You'll get very similar output if youd chosen some random
> value instead of zero when you corrupted the stack.  Why is zero special?

A good question, and the only answer I can give is "it just is".
You are right, this is a special case -- but it seems, in practice,
to be one that comes up fairly frequently, eg. when a wild pointer
or out of bounds array writes zeroes over a region of stack.

Why zero and not some other value?  Just because it is fairly
common to write zeroes into something, I guess.  The real 
answer is because we or our users see it a lot.


> If your answer to that question is something like: "because on arm the
> outermost frame gets marked by a zero pc", 

No, that's not it at all.  This has nothing to do with any
particular architecture (although some may or may not be
more vulnerable to it than others).  This has nothing to 
do with any deliberate attempt to "mark" the outermost frame.

OTOH, one context in which it does come up is when there
has been no attempt at all to mark the outermost frame -- 
as eg. the first frame of a new thread -- and the frame's
memory comes up full of zeros (either because that's the
default value for un-initialized memory, or because the
thread library initializes it to zero).

GDB looks where the function prologue says the return address
should be stored, and finds zero.





  reply	other threads:[~2007-12-04 23:25 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-30 22:53 Michael Snyder
2007-11-30 23:00 ` Daniel Jacobowitz
2007-12-01  1:50   ` Michael Snyder
2007-12-04  2:06     ` Michael Snyder
2007-12-04 18:05     ` Mark Kettenis
2007-12-04 23:25       ` Michael Snyder [this message]
2007-12-12 19:42         ` Michael Snyder
2007-12-16 20:08           ` Mark Kettenis
2007-12-17 18:43             ` Michael Snyder

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=1196809890.2501.287.camel@localhost.localdomain \
    --to=msnyder@specifix.com \
    --cc=drow@false.org \
    --cc=gdb-patches@sourceware.org \
    --cc=mark.kettenis@xs4all.nl \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox