summaryrefslogtreecommitdiff
path: root/fs/pipe.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2021-01-25 12:16:15 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-01-27 13:55:29 +0300
commite8572713897eb9e4bfaef90bf15d5dd00d7126fc (patch)
tree724683ec9884ebc98de4bd736603c4b405d3d369 /fs/pipe.c
parenteb5381efaf367e7976c9f337a507f7529f964917 (diff)
downloadlinux-e8572713897eb9e4bfaef90bf15d5dd00d7126fc.tar.xz
fs/pipe: allow sendfile() to pipe again
commit f8ad8187c3b536ee2b10502a8340c014204a1af0 upstream. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/pipe.c')
-rw-r--r--fs/pipe.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/pipe.c b/fs/pipe.c
index 0ac197658a2d..412b3b618994 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,
};
/*