Commit ce883a2b authored by Andreas Schwab's avatar Andreas Schwab Committed by Michael Ellerman
Browse files

powerpc/32: fix syscall wrappers with 64-bit arguments



With the introduction of syscall wrappers all wrappers for syscalls with
64-bit arguments must be handled specially, not only those that have
unaligned 64-bit arguments. This left out the fallocate() and
sync_file_range2() syscalls.

Fixes: 7e92e01b ("powerpc: Provide syscall wrapper")
Fixes: e2375062 ("powerpc/32: fix syscall wrappers with 64-bit arguments of unaligned register-pairs")
Signed-off-by: default avatarAndreas Schwab <schwab@linux-m68k.org>
Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/87mt9cxd6g.fsf_-_@igel.home
parent 40ff2143
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -104,6 +104,13 @@ long sys_ppc_ftruncate64(unsigned int fd, u32 reg4,
			 unsigned long len1, unsigned long len2);
long sys_ppc32_fadvise64(int fd, u32 unused, u32 offset1, u32 offset2,
			 size_t len, int advice);
long sys_ppc_sync_file_range2(int fd, unsigned int flags,
			      unsigned int offset1,
			      unsigned int offset2,
			      unsigned int nbytes1,
			      unsigned int nbytes2);
long sys_ppc_fallocate(int fd, int mode, u32 offset1, u32 offset2,
		       u32 len1, u32 len2);
#endif
#ifdef CONFIG_COMPAT
long compat_sys_mmap2(unsigned long addr, size_t len,
+12 −1
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@ PPC32_SYSCALL_DEFINE6(ppc32_fadvise64,
				 advice);
}

COMPAT_SYSCALL_DEFINE6(ppc_sync_file_range2,
PPC32_SYSCALL_DEFINE6(ppc_sync_file_range2,
		       int, fd, unsigned int, flags,
		       unsigned int, offset1, unsigned int, offset2,
		       unsigned int, nbytes1, unsigned int, nbytes2)
@@ -122,3 +122,14 @@ COMPAT_SYSCALL_DEFINE6(ppc_sync_file_range2,

	return ksys_sync_file_range(fd, offset, nbytes, flags);
}

#ifdef CONFIG_PPC32
SYSCALL_DEFINE6(ppc_fallocate,
		int, fd, int, mode,
		u32, offset1, u32, offset2, u32, len1, u32, len2)
{
	return ksys_fallocate(fd, mode,
			      merge_64(offset1, offset2),
			      merge_64(len1, len2));
}
#endif
+5 −2
Original line number Diff line number Diff line
@@ -394,8 +394,11 @@
305	common	signalfd			sys_signalfd			compat_sys_signalfd
306	common	timerfd_create			sys_timerfd_create
307	common	eventfd				sys_eventfd
308	common	sync_file_range2		sys_sync_file_range2		compat_sys_ppc_sync_file_range2
309	nospu	fallocate			sys_fallocate			compat_sys_fallocate
308	32	sync_file_range2		sys_ppc_sync_file_range2	compat_sys_ppc_sync_file_range2
308	64	sync_file_range2		sys_sync_file_range2
308	spu	sync_file_range2		sys_sync_file_range2
309	32	fallocate			sys_ppc_fallocate		compat_sys_fallocate
309	64	fallocate			sys_fallocate
310	nospu	subpage_prot			sys_subpage_prot
311	32	timerfd_settime			sys_timerfd_settime32
311	64	timerfd_settime			sys_timerfd_settime