Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: 7e92e01b7245 ("powerpc: Provide syscall wrapper")
Fixes: e23750623835 ("powerpc/32: fix syscall wrappers with 64-bit arguments of unaligned register-pairs")
Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/87mt9cxd6g.fsf_-_@igel.home

authored by

Andreas Schwab and committed by
Michael Ellerman
ce883a2b 40ff2143

+24 -3
+7
arch/powerpc/include/asm/syscalls.h
··· 104 104 unsigned long len1, unsigned long len2); 105 105 long sys_ppc32_fadvise64(int fd, u32 unused, u32 offset1, u32 offset2, 106 106 size_t len, int advice); 107 + long sys_ppc_sync_file_range2(int fd, unsigned int flags, 108 + unsigned int offset1, 109 + unsigned int offset2, 110 + unsigned int nbytes1, 111 + unsigned int nbytes2); 112 + long sys_ppc_fallocate(int fd, int mode, u32 offset1, u32 offset2, 113 + u32 len1, u32 len2); 107 114 #endif 108 115 #ifdef CONFIG_COMPAT 109 116 long compat_sys_mmap2(unsigned long addr, size_t len,
+12 -1
arch/powerpc/kernel/sys_ppc32.c
··· 112 112 advice); 113 113 } 114 114 115 - COMPAT_SYSCALL_DEFINE6(ppc_sync_file_range2, 115 + PPC32_SYSCALL_DEFINE6(ppc_sync_file_range2, 116 116 int, fd, unsigned int, flags, 117 117 unsigned int, offset1, unsigned int, offset2, 118 118 unsigned int, nbytes1, unsigned int, nbytes2) ··· 122 122 123 123 return ksys_sync_file_range(fd, offset, nbytes, flags); 124 124 } 125 + 126 + #ifdef CONFIG_PPC32 127 + SYSCALL_DEFINE6(ppc_fallocate, 128 + int, fd, int, mode, 129 + u32, offset1, u32, offset2, u32, len1, u32, len2) 130 + { 131 + return ksys_fallocate(fd, mode, 132 + merge_64(offset1, offset2), 133 + merge_64(len1, len2)); 134 + } 135 + #endif
+5 -2
arch/powerpc/kernel/syscalls/syscall.tbl
··· 394 394 305 common signalfd sys_signalfd compat_sys_signalfd 395 395 306 common timerfd_create sys_timerfd_create 396 396 307 common eventfd sys_eventfd 397 - 308 common sync_file_range2 sys_sync_file_range2 compat_sys_ppc_sync_file_range2 398 - 309 nospu fallocate sys_fallocate compat_sys_fallocate 397 + 308 32 sync_file_range2 sys_ppc_sync_file_range2 compat_sys_ppc_sync_file_range2 398 + 308 64 sync_file_range2 sys_sync_file_range2 399 + 308 spu sync_file_range2 sys_sync_file_range2 400 + 309 32 fallocate sys_ppc_fallocate compat_sys_fallocate 401 + 309 64 fallocate sys_fallocate 399 402 310 nospu subpage_prot sys_subpage_prot 400 403 311 32 timerfd_settime sys_timerfd_settime32 401 404 311 64 timerfd_settime sys_timerfd_settime