diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2021-01-25 10:16:15 +0100 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2021-01-25 21:32:26 +0100 |
commit | f8ad8187c3b536ee2b10502a8340c014204a1af0 (patch) | |
tree | 0f6d751ef9f44db7d0438f3b75eee6a3fff75ddb /fs/pipe.c | |
parent | Commit 9bb48c82aced ("tty: implement write_iter") converted the tty (diff) | |
download | linux-f8ad8187c3b536ee2b10502a8340c014204a1af0.tar.xz linux-f8ad8187c3b536ee2b10502a8340c014204a1af0.zip |
fs/pipe: allow sendfile() to pipe again
After commit 36e2c7421f02 ("fs: don't allow splice read/write
without explicit ops") sendfile() could no longer send data
from a real file to a pipe, breaking for example certain cgit
setups (e.g. when running behind fcgiwrap), because in this
case cgit will try to do exactly this: sendfile() to a pipe.
Fix this by using iter_file_splice_write for the splice_write
method of pipes, as suggested by Christoph.
Cc: stable@vger.kernel.org
Fixes: 36e2c7421f02 ("fs: don't allow splice read/write without explicit ops")
Suggested-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Tested-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/pipe.c')
-rw-r--r-- | fs/pipe.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/pipe.c b/fs/pipe.c index c5989cfd564d..39c96845a72f 100644 --- a/fs/pipe.c +++ b/fs/pipe.c @@ -1206,6 +1206,7 @@ const struct file_operations pipefifo_fops = { .unlocked_ioctl = pipe_ioctl, .release = pipe_release, .fasync = pipe_fasync, + .splice_write = iter_file_splice_write, }; /* |