Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1335683

Re: [PATCH] af_unix: Don't set err in unix_stream_read_generic unless there was an error

From David Miller <davem@davemloft.net>
Newsgroups linux.kernel
Subject Re: [PATCH] af_unix: Don't set err in unix_stream_read_generic unless there was an error
Date 2016-02-16 19:00 +0100
Message-ID <r2S4N-2Fp-3@gated-at.bofh.it> (permalink)
References <qZW4W-7bA-3@gated-at.bofh.it> <qZYq9-qH-57@gated-at.bofh.it> <qZZ2O-HE-11@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Rainer Weikusat <rweikusat@mobileactivedefense.com>
Date: Mon, 08 Feb 2016 18:47:19 +0000

> The present unix_stream_read_generic contains various code sequences of
> the form
> 
> err = -EDISASTER;
> if (<test>)
> 	goto out;
> 
> This has the unfortunate side effect of possibly causing the error code
> to bleed through to the final
> 
> out:
> 	return copied ? : err;
> 
> and then to be wrongly returned if no data was copied because the caller
> didn't supply a data buffer, as demonstrated by the program available at
> 
> http://pad.lv/1540731
> 
> Change it such that err is only set if an error condition was detected.
> 
> Fixes: 3822b5c2fc62 ("af_unix: Revert 'lock_interruptible' in stream receive code")
> Reported-by: Joseph Salisbury <joseph.salisbury@canonical.com>
> Signed-off-by: Rainer Weikusat <rweikusat@mobileactivedefense.com>

Applied, thanks Rainer.

And BTW I disagree with some of the feedback I saw in these threads
about "if (x) goto out;" being unreadable and that it should be avoided.

That's completely wrong.

Fact is, we've all been reading code of that form for multiple decades.
So it's the style we are _MOST_ familiar with, and it is therefore the
style that is the easiest and clearest for kernel developers to understand.

Especially those of us who review hundreds of patches per day.

And it doesn't matter at all what the compiler does underneath.

Furthermore, such a style works best in the long term because if real
cleanup operations are added for exit from the function, less has to
change and such patches are therefore significantly easier to review.

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

Re: [PATCH] af_unix: Don't set err in unix_stream_read_generic  unless there was an error David Miller <davem@davemloft.net> - 2016-02-16 19:00 +0100
  Re: [PATCH] af_unix: Don't set err in unix_stream_read_generic  unless there was an error Ben Hutchings <ben@decadent.org.uk> - 2016-02-17 01:30 +0100
    Re: [PATCH] af_unix: Don't set err in unix_stream_read_generic  unless there was an error David Miller <davem@davemloft.net> - 2016-02-17 02:10 +0100

csiph-web