From: Arnd Bergmann <arnd@arndb.de> To: y2038@lists.linaro.org, linux-kernel@vger.kernel.org Cc: Arnd Bergmann <arnd@arndb.de>, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, libc-alpha@sourceware.org, tglx@linutronix.de, deepa.kernel@gmail.com, viro@zeniv.linux.org.uk, ebiederm@xmission.com, albert.aribaud@3adev.fr, linux-s390@vger.kernel.org, schwidefsky@de.ibm.com, x86@kernel.org, catalin.marinas@arm.com, will.deacon@arm.com, linux-mips@linux-mips.org, jhogan@kernel.org, ralf@linux-mips.org, linuxppc-dev@lists.ozlabs.org, sparclinux@vger.kernel.org Subject: [PATCH v3 16/17] y2038: ipc: Redirect ipc(SEMTIMEDOP, ...) to compat_ksys_semtimedop Date: Thu, 19 Apr 2018 16:37:36 +0200 [thread overview] Message-ID: <20180419143737.606138-17-arnd@arndb.de> (raw) In-Reply-To: <20180419143737.606138-1-arnd@arndb.de> 32-bit architectures implementing 64BIT_TIME and COMPAT_32BIT_TIME need to have the traditional semtimedop() behavior with 32-bit timestamps for sys_ipc() by calling compat_ksys_semtimedop(), while those that are not yet converted need to keep using ksys_semtimedop() like 64-bit architectures do. Note that I chose to not implement a new SEMTIMEDOP64 function that corresponds to the new sys_semtimedop() with 64-bit timeouts. The reason here is that sys_ipc() should no longer be used for new system calls, and libc should just call the semtimedop syscall directly. One open question remain to whether we want to completely avoid the sys_ipc() system call for architectures that do not yet have all the individual calls as they get converted to 64-bit time_t. Doing that would require adding several extra system calls on m68k, mips, powerpc, s390, sh, sparc, and x86-32. Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- ipc/syscall.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ipc/syscall.c b/ipc/syscall.c index 77a883ef2eca..65d405f1ba0c 100644 --- a/ipc/syscall.c +++ b/ipc/syscall.c @@ -30,9 +30,14 @@ SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second, return ksys_semtimedop(first, (struct sembuf __user *)ptr, second, NULL); case SEMTIMEDOP: - return ksys_semtimedop(first, (struct sembuf __user *)ptr, - second, - (const struct timespec __user *)fifth); + if (IS_ENABLED(CONFIG_64BIT) || !IS_ENABLED(CONFIG_64BIT_TIME)) + return ksys_semtimedop(first, ptr, second, + (const struct __kernel_timespec __user *)fifth); + else if (IS_ENABLED(CONFIG_COMPAT_32BIT_TIME)) + return compat_ksys_semtimedop(first, ptr, second, + (const struct compat_timespec __user *)fifth); + else + return -ENOSYS; case SEMGET: return ksys_semget(first, second, third); @@ -130,6 +135,8 @@ COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second, /* struct sembuf is the same on 32 and 64bit :)) */ return ksys_semtimedop(first, compat_ptr(ptr), second, NULL); case SEMTIMEDOP: + if (!IS_ENABLED(CONFIG_COMPAT_32BIT_TIME)) + return -ENOSYS; return compat_ksys_semtimedop(first, compat_ptr(ptr), second, compat_ptr(fifth)); case SEMGET: -- 2.9.0
WARNING: multiple messages have this Message-ID (diff)
From: Arnd Bergmann <arnd@arndb.de> To: y2038@lists.linaro.org, linux-kernel@vger.kernel.org Cc: Arnd Bergmann <arnd@arndb.de>, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, libc-alpha@sourceware.org, tglx@linutronix.de, deepa.kernel@gmail.com, viro@zeniv.linux.org.uk, ebiederm@xmission.com, albert.aribaud@3adev.fr, linux-s390@vger.kernel.org, schwidefsky@de.ibm.com, x86@kernel.org, catalin.marinas@arm.com, will.deacon@arm.com, linux-mips@linux-mips.org, jhogan@kernel.org, ralf@linux-mips.org, linuxppc-dev@lists.ozlabs.org, sparclinux@vger.kernel.org Subject: [PATCH v3 16/17] y2038: ipc: Redirect ipc(SEMTIMEDOP, ...) to compat_ksys_semtimedop Date: Thu, 19 Apr 2018 14:37:36 +0000 [thread overview] Message-ID: <20180419143737.606138-17-arnd@arndb.de> (raw) In-Reply-To: <20180419143737.606138-1-arnd@arndb.de> 32-bit architectures implementing 64BIT_TIME and COMPAT_32BIT_TIME need to have the traditional semtimedop() behavior with 32-bit timestamps for sys_ipc() by calling compat_ksys_semtimedop(), while those that are not yet converted need to keep using ksys_semtimedop() like 64-bit architectures do. Note that I chose to not implement a new SEMTIMEDOP64 function that corresponds to the new sys_semtimedop() with 64-bit timeouts. The reason here is that sys_ipc() should no longer be used for new system calls, and libc should just call the semtimedop syscall directly. One open question remain to whether we want to completely avoid the sys_ipc() system call for architectures that do not yet have all the individual calls as they get converted to 64-bit time_t. Doing that would require adding several extra system calls on m68k, mips, powerpc, s390, sh, sparc, and x86-32. Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- ipc/syscall.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ipc/syscall.c b/ipc/syscall.c index 77a883ef2eca..65d405f1ba0c 100644 --- a/ipc/syscall.c +++ b/ipc/syscall.c @@ -30,9 +30,14 @@ SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second, return ksys_semtimedop(first, (struct sembuf __user *)ptr, second, NULL); case SEMTIMEDOP: - return ksys_semtimedop(first, (struct sembuf __user *)ptr, - second, - (const struct timespec __user *)fifth); + if (IS_ENABLED(CONFIG_64BIT) || !IS_ENABLED(CONFIG_64BIT_TIME)) + return ksys_semtimedop(first, ptr, second, + (const struct __kernel_timespec __user *)fifth); + else if (IS_ENABLED(CONFIG_COMPAT_32BIT_TIME)) + return compat_ksys_semtimedop(first, ptr, second, + (const struct compat_timespec __user *)fifth); + else + return -ENOSYS; case SEMGET: return ksys_semget(first, second, third); @@ -130,6 +135,8 @@ COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second, /* struct sembuf is the same on 32 and 64bit :)) */ return ksys_semtimedop(first, compat_ptr(ptr), second, NULL); case SEMTIMEDOP: + if (!IS_ENABLED(CONFIG_COMPAT_32BIT_TIME)) + return -ENOSYS; return compat_ksys_semtimedop(first, compat_ptr(ptr), second, compat_ptr(fifth)); case SEMGET: -- 2.9.0
next prev parent reply other threads:[~2018-04-19 14:38 UTC|newest] Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-04-19 14:37 [PATCH v3 00/17] y2038: Convert IPC syscalls Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 01/17] y2038: asm-generic: Extend sysvipc data structures Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:59 ` Eric W. Biederman 2018-04-19 14:59 ` Eric W. Biederman 2018-04-19 15:20 ` Arnd Bergmann 2018-04-19 15:20 ` Arnd Bergmann 2018-04-19 15:20 ` Arnd Bergmann 2018-04-19 21:24 ` Arnd Bergmann 2018-04-19 21:24 ` Arnd Bergmann 2018-04-19 21:24 ` Arnd Bergmann 2018-04-19 22:12 ` Eric W. Biederman 2018-04-19 22:12 ` Eric W. Biederman 2018-04-19 22:12 ` Eric W. Biederman 2018-04-19 22:12 ` Eric W. Biederman 2018-04-20 8:54 ` Arnd Bergmann 2018-04-20 8:54 ` Arnd Bergmann 2018-04-20 8:54 ` Arnd Bergmann 2018-04-20 13:03 ` [PATCH] x86: ipc: fix x32 version of shmid64_ds and msqid64_ds Arnd Bergmann 2018-04-20 13:03 ` Arnd Bergmann 2018-04-20 13:03 ` Arnd Bergmann 2018-04-20 13:53 ` Jeffrey Walton 2018-04-20 13:53 ` Jeffrey Walton 2018-04-20 13:53 ` Jeffrey Walton 2018-04-20 14:38 ` Arnd Bergmann 2018-04-20 14:38 ` Arnd Bergmann 2018-04-20 14:38 ` Arnd Bergmann 2018-04-22 12:38 ` H.J. Lu 2018-04-22 12:38 ` H.J. Lu 2018-04-22 12:38 ` H.J. Lu 2018-04-22 20:17 ` Arnd Bergmann 2018-04-22 20:17 ` Arnd Bergmann 2018-04-22 20:17 ` Arnd Bergmann 2018-04-19 15:30 ` [PATCH v3 01/17] y2038: asm-generic: Extend sysvipc data structures Zack Weinberg 2018-04-19 15:30 ` Zack Weinberg 2018-04-19 15:51 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 02/17] y2038: alpha: Remove unneeded ipc uapi header files Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 03/17] y2038: ia64: " Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 04/17] y2038: s390: " Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-20 7:54 ` Heiko Carstens 2018-04-20 7:54 ` Heiko Carstens 2018-04-20 7:58 ` Arnd Bergmann 2018-04-20 7:58 ` Arnd Bergmann 2018-04-20 7:58 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 05/17] y2038: arm64: Extend sysvipc compat data structures Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 06/17] y2038: mips: Extend sysvipc " Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 07/17] y2038: x86: " Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 08/17] y2038: parisc: " Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 09/17] y2038: sparc: " Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 10/17] y2038: powerpc: " Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 11/17] y2038: xtensa: " Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 12/17] y2038: ipc: Use ktime_get_real_seconds consistently Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 13/17] y2038: ipc: Report long times to user space Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 14/17] y2038: ipc: Use __kernel_timespec Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 15/17] y2038: ipc: Enable COMPAT_32BIT_TIME Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann [this message] 2018-04-19 14:37 ` [PATCH v3 16/17] y2038: ipc: Redirect ipc(SEMTIMEDOP, ...) to compat_ksys_semtimedop Arnd Bergmann 2018-04-19 14:37 ` [PATCH v3 17/17] y2038: compat: Move common compat types to asm-generic/compat.h Arnd Bergmann 2018-04-19 14:37 ` Arnd Bergmann
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180419143737.606138-17-arnd@arndb.de \ --to=arnd@arndb.de \ --cc=albert.aribaud@3adev.fr \ --cc=catalin.marinas@arm.com \ --cc=deepa.kernel@gmail.com \ --cc=ebiederm@xmission.com \ --cc=jhogan@kernel.org \ --cc=libc-alpha@sourceware.org \ --cc=linux-api@vger.kernel.org \ --cc=linux-arch@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mips@linux-mips.org \ --cc=linux-s390@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=ralf@linux-mips.org \ --cc=schwidefsky@de.ibm.com \ --cc=sparclinux@vger.kernel.org \ --cc=tglx@linutronix.de \ --cc=viro@zeniv.linux.org.uk \ --cc=will.deacon@arm.com \ --cc=x86@kernel.org \ --cc=y2038@lists.linaro.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.