Skip to content

Commit

Permalink
[PATCH] x86-64: Fix 32bit sendfile
Browse files Browse the repository at this point in the history
If we use 64bit kernel on ia64/x86_64/s390 architecture, and we run
32bit binary on 32bit compatibility mode, sendfile system call seems be
not set offset argument.

This is because sendfile's return value is not zero but the code regards
the result by return value is zero or not.

This problem will be affect to ia64/x86_64/s390 and not affect to other
architecture does not affect other architecture (mips/parisc/ppc64/sparc64).

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Tsuneo.Yoshioka@f-secure.com authored and Linus Torvalds committed Sep 12, 2005
1 parent 9acf23c commit 83b942b
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 3 deletions.
2 changes: 1 addition & 1 deletion arch/ia64/ia32/sys_ia32.c
Original file line number Diff line number Diff line change
Expand Up @@ -2327,7 +2327,7 @@ sys32_sendfile (int out_fd, int in_fd, int __user *offset, unsigned int count)
ret = sys_sendfile(out_fd, in_fd, offset ? (off_t __user *) &of : NULL, count);
set_fs(old_fs);

if (!ret && offset && put_user(of, offset))
if (offset && put_user(of, offset))
return -EFAULT;

return ret;
Expand Down
2 changes: 1 addition & 1 deletion arch/s390/kernel/compat_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -678,7 +678,7 @@ asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, size
ret = sys_sendfile(out_fd, in_fd, offset ? &of : NULL, count);
set_fs(old_fs);

if (!ret && offset && put_user(of, offset))
if (offset && put_user(of, offset))
return -EFAULT;

return ret;
Expand Down
2 changes: 1 addition & 1 deletion arch/x86_64/ia32/sys_ia32.c
Original file line number Diff line number Diff line change
Expand Up @@ -751,7 +751,7 @@ sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, s32 count)
ret = sys_sendfile(out_fd, in_fd, offset ? &of : NULL, count);
set_fs(old_fs);

if (!ret && offset && put_user(of, offset))
if (offset && put_user(of, offset))
return -EFAULT;

return ret;
Expand Down

0 comments on commit 83b942b

Please sign in to comment.