sys_socketpair: Free socketpair file descriptors if copyout() fails.
authorVenkatesh Srinivas <me@endeavour.zapto.org>
Sat, 24 Sep 2011 18:02:48 +0000 (11:02 -0700)
committerVenkatesh Srinivas <me@endeavour.zapto.org>
Sat, 24 Sep 2011 18:02:48 +0000 (11:02 -0700)
sys/kern/uipc_syscalls.c

index 4950a4c..616a3dd 100644 (file)
@@ -620,8 +620,6 @@ free1:
 
 /*
  * socketpair(int domain, int type, int protocol, int *rsv)
- *
- * MPALMOSTSAFE
  */
 int
 sys_socketpair(struct socketpair_args *uap)
@@ -630,8 +628,15 @@ sys_socketpair(struct socketpair_args *uap)
 
        error = kern_socketpair(uap->domain, uap->type, uap->protocol, sockv);
 
-       if (error == 0)
+       if (error == 0) {
                error = copyout(sockv, uap->rsv, sizeof(sockv));
+
+               if (error != 0) {
+                       kern_close(sockv[0]);
+                       kern_close(sockv[1]);
+               }
+       }
+
        return (error);
 }