]> git.baikalelectronics.ru Git - kernel.git/commit
af_unix: Don't set err in unix_stream_read_generic unless there was an error
authorRainer Weikusat <rweikusat@mobileactivedefense.com>
Mon, 8 Feb 2016 18:47:19 +0000 (18:47 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 16 Feb 2016 17:48:04 +0000 (12:48 -0500)
commitb1761c3a7cb5d0706870b8fb681e13ee7b856912
tree174da5394bc86b1f6a66a69ce9da19a688dae40a
parent8571dd4175a3e4cdabea17daa80b19d7e352d541
af_unix: Don't set err in unix_stream_read_generic unless there was an error

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: 00bdf2588b31 ("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>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/unix/af_unix.c