]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/pipe.c
tc35815: Fix receiver hangup on Rx FIFO overflow
[linux-2.6-omap-h63xx.git] / fs / pipe.c
index 8be381bbcb54ad4108ea3bf453b19afd702314b5..ec228bc9f8824128ea99c5cb24abc743063e00bb 100644 (file)
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -17,6 +17,7 @@
 #include <linux/highmem.h>
 #include <linux/pagemap.h>
 #include <linux/audit.h>
+#include <linux/syscalls.h>
 
 #include <asm/uaccess.h>
 #include <asm/ioctls.h>
@@ -988,7 +989,10 @@ struct file *create_write_pipe(void)
        return f;
 
  err_dentry:
+       free_pipe_info(inode);
        dput(dentry);
+       return ERR_PTR(err);
+
  err_inode:
        free_pipe_info(inode);
        iput(inode);
@@ -1072,6 +1076,26 @@ int do_pipe(int *fd)
        return error;
 }
 
+/*
+ * sys_pipe() is the normal C calling standard for creating
+ * a pipe. It's not the way Unix traditionally does this, though.
+ */
+asmlinkage long __weak sys_pipe(int __user *fildes)
+{
+       int fd[2];
+       int error;
+
+       error = do_pipe(fd);
+       if (!error) {
+               if (copy_to_user(fildes, fd, sizeof(fd))) {
+                       sys_close(fd[0]);
+                       sys_close(fd[1]);
+                       error = -EFAULT;
+               }
+       }
+       return error;
+}
+
 /*
  * pipefs should _never_ be mounted by userland - too much of security hassle,
  * no real gain from having the whole whorehouse mounted. So we don't need