Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e412ac49 authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds
Browse files

x86_64: Fix readahead/sync_file_range/fadvise64 compat calls



Correctly convert the u64 arguments from 32bit to 64bit.

Pointed out by Heiko Carstens.

I guess this proves Linus' theory that nobody uses the more exotic Linux
specific syscalls.  It wasn't discovered by a user.

Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 7c8545e9
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -620,7 +620,7 @@ ia32_sys_call_table:
	.quad quiet_ni_syscall		/* tux */
	.quad quiet_ni_syscall    	/* security */
	.quad sys_gettid	
	.quad sys_readahead	/* 225 */
	.quad sys32_readahead	/* 225 */
	.quad sys_setxattr
	.quad sys_lsetxattr
	.quad sys_fsetxattr
@@ -645,7 +645,7 @@ ia32_sys_call_table:
	.quad compat_sys_io_getevents
	.quad compat_sys_io_submit
	.quad sys_io_cancel
	.quad sys_fadvise64		/* 250 */
	.quad sys32_fadvise64		/* 250 */
	.quad quiet_ni_syscall 	/* free_huge_pages */
	.quad sys_exit_group
	.quad sys32_lookup_dcookie
@@ -709,7 +709,7 @@ ia32_sys_call_table:
	.quad compat_sys_set_robust_list
	.quad compat_sys_get_robust_list
	.quad sys_splice
	.quad sys_sync_file_range
	.quad sys32_sync_file_range
	.quad sys_tee			/* 315 */
	.quad compat_sys_vmsplice
	.quad compat_sys_move_pages
+19 −0
Original line number Diff line number Diff line
@@ -860,3 +860,22 @@ long sys32_lookup_dcookie(u32 addr_low, u32 addr_high,
	return sys_lookup_dcookie(((u64)addr_high << 32) | addr_low, buf, len);
}

asmlinkage ssize_t sys32_readahead(int fd, unsigned off_lo, unsigned off_hi, size_t count)
{
	return sys_readahead(fd, ((u64)off_hi << 32) | off_lo, count);
}

asmlinkage long sys32_sync_file_range(int fd, unsigned off_low, unsigned off_hi,
			   unsigned n_low, unsigned n_hi,  int flags)
{
	return sys_sync_file_range(fd,
				   ((u64)off_hi << 32) | off_low,
				   ((u64)n_hi << 32) | n_low, flags);
}

asmlinkage long sys32_fadvise64(int fd, unsigned offset_lo, unsigned offset_hi, size_t len,
		     int advice)
{
	return sys_fadvise64_64(fd, ((u64)offset_hi << 32) | offset_lo,
				len, advice);
}