diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-02-05 20:03:05 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-02-05 20:03:05 +0000 |
| commit | f9edb08480901b8c7d85837d72f8702008b0a773 (patch) | |
| tree | c04feb833accf3797a2818bf289559ef157195a4 /sys/compat/linux/linux_file.c | |
| parent | 899ca3d65f2b5e1cdf4d563783c61ebcff0862cf (diff) | |
| parent | 9ad221a558f813645e352036ee2445903d9a9b6f (diff) | |
Notes
Diffstat (limited to 'sys/compat/linux/linux_file.c')
| -rw-r--r-- | sys/compat/linux/linux_file.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/sys/compat/linux/linux_file.c b/sys/compat/linux/linux_file.c index 81990d1fde9c..7c44009724b5 100644 --- a/sys/compat/linux/linux_file.c +++ b/sys/compat/linux/linux_file.c @@ -1537,11 +1537,16 @@ linux_pipe(struct thread *td, struct linux_pipe_args *args) #endif error = kern_pipe(td, fildes, 0, NULL, NULL); - if (error) + if (error != 0) return (error); - /* XXX: Close descriptors on error. */ - return (copyout(fildes, args->pipefds, sizeof(fildes))); + error = copyout(fildes, args->pipefds, sizeof(fildes)); + if (error != 0) { + (void)kern_close(td, fildes[0]); + (void)kern_close(td, fildes[1]); + } + + return (error); } int @@ -1564,11 +1569,16 @@ linux_pipe2(struct thread *td, struct linux_pipe2_args *args) if ((args->flags & LINUX_O_CLOEXEC) != 0) flags |= O_CLOEXEC; error = kern_pipe(td, fildes, flags, NULL, NULL); - if (error) + if (error != 0) return (error); - /* XXX: Close descriptors on error. */ - return (copyout(fildes, args->pipefds, sizeof(fildes))); + error = copyout(fildes, args->pipefds, sizeof(fildes)); + if (error != 0) { + (void)kern_close(td, fildes[0]); + (void)kern_close(td, fildes[1]); + } + + return (error); } int |
