[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#641419: linux-image-2.6.32-5-amd64: sendfile(2) behaves incorrectly in 2.6.32-5-amd64, overwriting written data



On Tue, 2011-09-13 at 10:18 +0000, Mike Ashton wrote:
> Package: linux-2.6
> Version: 2.6.32-35squeeze2
> Severity: important
> 
> 
> In the squeeze standard 64 bit kernel (with either 64 or 32 bit
> userspace) sendfile(2) is overwriting data already written to the file
> descriptor by write(2).  Here's a minimal test case:
[...]

Please can you test whether the attached patch fixes this.  Instructions
for rebuilding the kernel are at
<http://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-official>.

Ben.

-- 
Ben Hutchings
To err is human; to really foul things up requires a computer.
From: Changli Gao <xiaosuo@gmail.com>
Date: Tue, 29 Jun 2010 13:09:18 +0200
Subject: [PATCH] splice: direct_splice_actor() should not use pos in sd

commit 2cb4b05e7647891b46b91c07c9a60304803d1688 upstream.

direct_splice_actor() shouldn't use sd->pos, as sd->pos is for file reading,
file->f_pos should be used instead.

Signed-off-by: Changli Gao <xiaosuo@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
----
 fs/splice.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
---
 fs/splice.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/fs/splice.c b/fs/splice.c
index 740e6b9..4190049 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -1282,7 +1282,8 @@ static int direct_splice_actor(struct pipe_inode_info *pipe,
 {
 	struct file *file = sd->u.file;
 
-	return do_splice_from(pipe, file, &sd->pos, sd->total_len, sd->flags);
+	return do_splice_from(pipe, file, &file->f_pos, sd->total_len,
+			      sd->flags);
 }
 
 /**
-- 
1.7.5.4

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: