X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=fs%2Fpipe.c;h=ebafde7d6abab948f9fa3a23e71f39360c757c71;hb=8488df894d05d6fa41c2bd298c335f944bb0e401;hp=9a06e8e48e8dfb366a8c08bd387985788391a5d8;hpb=e25db641c0e6dd49c5db24dbe154048d4a466727;p=powerpc.git diff --git a/fs/pipe.c b/fs/pipe.c index 9a06e8e48e..ebafde7d6a 100644 --- a/fs/pipe.c +++ b/fs/pipe.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -935,8 +936,9 @@ struct file *create_write_pipe(void) void free_write_pipe(struct file *f) { - mntput(f->f_path.mnt); + free_pipe_info(f->f_dentry->d_inode); dput(f->f_path.dentry); + mntput(f->f_path.mnt); put_filp(f); } @@ -984,6 +986,10 @@ int do_pipe(int *fd) goto err_fdr; fdw = error; + error = audit_fd_pair(fdr, fdw); + if (error < 0) + goto err_fdw; + fd_install(fdr, fr); fd_install(fdw, fw); fd[0] = fdr; @@ -991,9 +997,13 @@ int do_pipe(int *fd) return 0; + err_fdw: + put_unused_fd(fdw); err_fdr: put_unused_fd(fdr); err_read_pipe: + dput(fr->f_dentry); + mntput(fr->f_vfsmnt); put_filp(fr); err_write_pipe: free_write_pipe(fw);