[PATCH] fs/pipe: allow sendfile() to pipe again

2021-01-26 Thread Johannes Berg
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: sta...@vger.kernel.org
Fixes: 36e2c7421f02 ("fs: don't allow splice read/write without explicit ops")
Suggested-by: Christoph Hellwig 
Tested-by: Johannes Berg 
Signed-off-by: Johannes Berg 
---
Mostly for the record, since it looks like we'll have a proper
fix without another intermediate pipe. However, this fixes the
regression for now.
---
 fs/pipe.c | 1 +
 1 file changed, 1 insertion(+)

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,
 };
 
 /*
-- 
2.26.2



Re: [PATCH] fs/pipe: allow sendfile() to pipe again

2021-01-26 Thread Christoph Hellwig
Looks good,

Reviewed-by: Christoph Hellwig 


Re: [PATCH] fs/pipe: allow sendfile() to pipe again

2021-01-25 Thread Linus Torvalds
On Mon, Jan 25, 2021 at 1:16 AM Johannes Berg  wrote:
>
> Mostly for the record, since it looks like we'll have a proper
> fix without another intermediate pipe. However, this fixes the
> regression for now.

I've applied this anyway.

We'll see how big Al's proper fix ends up being, and depending on that
this one-liner might just be the right thing for stable anyway.

And if Al's patch ends up being small, simple and clean, this
one-liner won't matter, but it's not like there's any real downside to
it.

   Linus