diff options
author | David Miller <davem@davemloft.net> | 2007-11-13 11:02:56 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-11-21 20:25:54 +0300 |
commit | 2c41b3c3f54193a93284ca314784d1c6da39ecdc (patch) | |
tree | 2472146baf4f5b836b6cf29d1063756350f2c6ff /net | |
parent | d6eb5c86ed40fe57e411c4ee72b38d0a83642302 (diff) | |
download | linux-2c41b3c3f54193a93284ca314784d1c6da39ecdc.tar.xz |
Fix error returns in sys_socketpair()
patch bf3c23d171e35e6e168074a1514b0acd59cfd81a in mainline.
[NET]: Fix error reporting in sys_socketpair().
If either of the two sock_alloc_fd() calls fail, we
forget to update 'err' and thus we'll erroneously
return zero in these cases.
Based upon a report and patch from Rich Paul, and
commentary from Chuck Ebbert.
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'net')
-rw-r--r-- | net/socket.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/socket.c b/net/socket.c index 48bd793ecc1c..8211578517b3 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1246,11 +1246,14 @@ asmlinkage long sys_socketpair(int family, int type, int protocol, goto out_release_both; fd1 = sock_alloc_fd(&newfile1); - if (unlikely(fd1 < 0)) + if (unlikely(fd1 < 0)) { + err = fd1; goto out_release_both; + } fd2 = sock_alloc_fd(&newfile2); if (unlikely(fd2 < 0)) { + err = fd2; put_filp(newfile1); put_unused_fd(fd1); goto out_release_both; |