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 Original line Diff line number Diff line
@@ -104,6 +104,13 @@ long sys_ppc_ftruncate64(unsigned int fd, u32 reg4,
			 unsigned long len1, unsigned long len2);
			 unsigned long len1, unsigned long len2);
long sys_ppc32_fadvise64(int fd, u32 unused, u32 offset1, u32 offset2,
long sys_ppc32_fadvise64(int fd, u32 unused, u32 offset1, u32 offset2,
			 size_t len, int advice);
			 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
#endif
#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT
long compat_sys_mmap2(unsigned long addr, size_t len,
long compat_sys_mmap2(unsigned long addr, size_t len,
+12 −1
Original line number Original line Diff line number Diff line
@@ -112,7 +112,7 @@ PPC32_SYSCALL_DEFINE6(ppc32_fadvise64,
				 advice);
				 advice);
}
}


COMPAT_SYSCALL_DEFINE6(ppc_sync_file_range2,
PPC32_SYSCALL_DEFINE6(ppc_sync_file_range2,
		       int, fd, unsigned int, flags,
		       int, fd, unsigned int, flags,
		       unsigned int, offset1, unsigned int, offset2,
		       unsigned int, offset1, unsigned int, offset2,
		       unsigned int, nbytes1, unsigned int, nbytes2)
		       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);
	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 Original line Diff line number Diff line
@@ -394,8 +394,11 @@
305	common	signalfd			sys_signalfd			compat_sys_signalfd
305	common	signalfd			sys_signalfd			compat_sys_signalfd
306	common	timerfd_create			sys_timerfd_create
306	common	timerfd_create			sys_timerfd_create
307	common	eventfd				sys_eventfd
307	common	eventfd				sys_eventfd
308	common	sync_file_range2		sys_sync_file_range2		compat_sys_ppc_sync_file_range2
308	32	sync_file_range2		sys_ppc_sync_file_range2	compat_sys_ppc_sync_file_range2
309	nospu	fallocate			sys_fallocate			compat_sys_fallocate
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
310	nospu	subpage_prot			sys_subpage_prot
311	32	timerfd_settime			sys_timerfd_settime32
311	32	timerfd_settime			sys_timerfd_settime32
311	64	timerfd_settime			sys_timerfd_settime
311	64	timerfd_settime			sys_timerfd_settime