summaryrefslogtreecommitdiffstats
path: root/net/socket.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2007-10-29 21:54:02 -0700
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-29 22:37:34 -0700
commitbf3c23d171e35e6e168074a1514b0acd59cfd81a (patch)
tree7e72bc27a71802ac5f803cecb53b5e8312e89678 /net/socket.c
parent29b67497f256399c4aa2adec27ab7ba24bba44e8 (diff)
downloadlinux-bf3c23d171e35e6e168074a1514b0acd59cfd81a.tar.gz
linux-bf3c23d171e35e6e168074a1514b0acd59cfd81a.tar.bz2
linux-bf3c23d171e35e6e168074a1514b0acd59cfd81a.zip
[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>
Diffstat (limited to 'net/socket.c')
-rw-r--r--net/socket.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/socket.c b/net/socket.c
index 540013ea8620..5d879fd3d01d 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -1250,11 +1250,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;