qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Rob Landley <rob@landley.net>
To: qemu-devel@nongnu.org
Cc: Markus Hitter <mah@jump-ing.de>, Robert Reif <reif@earthlink.net>
Subject: Re: [Qemu-devel] [PATCH] fix possible NULL pointer use in hw/ptimer.c
Date: Fri, 4 Jan 2008 18:44:43 -0600	[thread overview]
Message-ID: <200801041844.43789.rob@landley.net> (raw)
In-Reply-To: <99DF1970-75E9-4D9D-A6D3-C0F71B2CC6C5@jump-ing.de>

On Friday 04 January 2008 11:29:27 Markus Hitter wrote:
> Am 03.01.2008 um 15:02 schrieb Paul Brook:
> > Having to check every return value is extremely tedious and (as
> > you've proved)
> > easy to miss.
>
> Checking every return value is a measure for programming reliable code.

There's an old tounge-in-cheek programming rule: "Never test for an error 
condition you don't know how to handle."  An example of "ha ha, only 
serious".

Not only is defensive programming a huge source of bloat, but I've had to deal 
with a lot of programs where what broke _was_ some defensive check, and the 
code would have worked just fine if they just hadn't been so paranoid.  (So 
the return value of close() is nonzero.  What do you _do_ about it?  Calling 
abort() is not necessarily the sane response.)

I've got a shell script where bash spits out an error from an
  EVVVAR="$(thing | thing2)"
construct, despite getting the right answer.  Why?  Because thing2 exits after 
consuming all its data, and the left half of the pipeline outlives it by a 
milisecond or so and then errors out when it tries to flush and close stdout 
(which has already delivered all its data, but it gets an error return from 
doing this anyway and darn it, it's going to tell you about it!)

I think that to shut it up I need to rephrase it as:
  ENVVAR="$(thing 2>/dev/null | thing2)"
but to be honest, I haven't bothered.

> > If the allocation fails we don't have any viable alternatives, so
> > we may as well stop right there.
>
> Stop != segfault? What about a meaningful exit message? What if the
> code doesn't segfault but runs havok?

On modern operating systems, allocations only return zero when you exhaust 
virtual memory.  Returning nonzero doesn't mean you have enough memory, 
because it's given you a redundant copy on write mapping of the zero page and 
will fault in physical pages when you write to 'em, which has _no_ return 
value.  Instead, the out of memory killer will shoot your program in the head 
in the middle of it's run, and your only indication of a real out of memory 
status is "kill -9".

So on a modern system, defensive programming is also somewhat futile.

Just FYI.

Rob
-- 
"One of my most productive days was throwing away 1000 lines of code."
  - Ken Thompson.

  parent reply	other threads:[~2008-01-05  0:44 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-03  2:29 [Qemu-devel] [PATCH] fix possible NULL pointer use in hw/ptimer.c Robert Reif
2008-01-03  2:43 ` Paul Brook
2008-01-03  2:57   ` Robert Reif
2008-01-03 14:02     ` Paul Brook
2008-01-04 17:29       ` Markus Hitter
2008-01-04 17:44         ` Paul Brook
2008-01-04 18:14           ` Robert Reif
2008-01-05  0:44         ` Rob Landley [this message]
2008-01-05  1:07           ` Paul Brook
2008-01-05  2:47             ` Rob Landley
2008-01-05  9:55               ` Markus Hitter
2008-01-06 12:14                 ` Avi Kivity

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=200801041844.43789.rob@landley.net \
    --to=rob@landley.net \
    --cc=mah@jump-ing.de \
    --cc=qemu-devel@nongnu.org \
    --cc=reif@earthlink.net \
    /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;
as well as URLs for NNTP newsgroup(s).