mbox series

[00/11] y2038: add time64 syscalls

Message ID 20190110172216.313063-1-arnd@arndb.de (mailing list archive)
Headers show
Series y2038: add time64 syscalls | expand

Message

Arnd Bergmann Jan. 10, 2019, 5:22 p.m. UTC
This series finally gets us to the point of having system calls with
64-bit time_t on all architectures, after a long time of incremental
preparation patches.

There was actually one conversion that I missed during the summer,
i.e. Deepa's timex series, which I now updated based the 5.0-rc1 changes
and review comments.

I hope that the actual conversion should be uncontroversial by now,
even if some of the patches are rather large.

The one area that may need a little discussion is for the system call
numbers assigned in the final patch: Can we get consensus on whether
the idea of using the same numbers on all architectures, as well as my
choice of numbers makes sense here?

So far, I have done a lot of build testing across most architectures,
which has found a number of bugs. I have also done an LTP run on arm32
with existing user space, but not on the other architectures. I did LTP
tests with a modified musl libc[2] last summer on an older version of
this series to make sure that the new 64-bit time_t interfaces work.
The version there will need updates for testing with this new kernel
patch series; I plan to do that next.

For testing, the series plus the preparatory patches is available at
[3].  Once there is a general agreement on this series and I have done
more tests for the new system calls, I plan to add this to linux-next
through my asm-generic tree or Thomas' timers tree.

Please review and test!

      Arnd

[1] https://lore.kernel.org/lkml/20190110162435.309262-1-arnd@arndb.de/T/
[2] https://git.linaro.org/people/arnd/musl-y2038.git/
[3] https://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground.git y2038-5.0-rc1

Arnd Bergmann (8):
  time: make adjtime compat handling available for 32 bit
  time: fix sys_timer_settime prototype
  sparc64: add custom adjtimex/clock_adjtime functions
  y2038: syscalls: rename y2038 compat syscalls
  y2038: use time32 syscall names on 32-bit
  y2038: remove struct definition redirects
  y2038: rename old time and utime syscalls
  y2038: add 64-bit time_t syscalls to all 32-bit architectures

Deepa Dinamani (3):
  time: Add struct __kernel_timex
  timex: use __kernel_timex internally
  timex: change syscalls to use struct __kernel_timex

 arch/Kconfig                                |   2 +-
 arch/alpha/kernel/osf_sys.c                 |   5 +-
 arch/alpha/kernel/syscalls/syscall.tbl      |   2 +
 arch/arm/include/asm/unistd.h               |   4 +-
 arch/arm/kernel/sys_oabi-compat.c           |   8 +-
 arch/arm/tools/syscall.tbl                  |  77 ++++++++-----
 arch/arm64/include/asm/unistd.h             |   2 +-
 arch/arm64/include/asm/unistd32.h           |  89 ++++++++++----
 arch/ia64/kernel/syscalls/syscall.tbl       |   1 +
 arch/m68k/include/asm/unistd.h              |   4 +-
 arch/m68k/kernel/syscalls/syscall.tbl       |  72 +++++++-----
 arch/microblaze/include/asm/unistd.h        |   4 +-
 arch/microblaze/kernel/syscalls/syscall.tbl |  77 ++++++++-----
 arch/mips/include/asm/unistd.h              |   4 +-
 arch/mips/kernel/syscalls/syscall_n32.tbl   |  71 ++++++++----
 arch/mips/kernel/syscalls/syscall_n64.tbl   |   1 +
 arch/mips/kernel/syscalls/syscall_o32.tbl   |  74 +++++++-----
 arch/parisc/include/asm/unistd.h            |   9 +-
 arch/parisc/kernel/syscalls/syscall.tbl     | 105 ++++++++++++-----
 arch/powerpc/include/asm/unistd.h           |   8 +-
 arch/powerpc/kernel/syscalls/syscall.tbl    | 121 +++++++++++++++-----
 arch/s390/include/asm/unistd.h              |   2 +-
 arch/s390/kernel/syscalls/syscall.tbl       |  72 +++++++-----
 arch/sh/include/asm/unistd.h                |   4 +-
 arch/sh/kernel/syscalls/syscall.tbl         |  72 +++++++-----
 arch/sparc/include/asm/unistd.h             |   8 +-
 arch/sparc/kernel/sys_sparc_64.c            |  59 +++++++++-
 arch/sparc/kernel/syscalls/syscall.tbl      | 100 +++++++++++-----
 arch/x86/entry/syscalls/syscall_32.tbl      |  74 +++++++-----
 arch/x86/entry/syscalls/syscall_64.tbl      |   4 +-
 arch/x86/include/asm/unistd.h               |   8 +-
 arch/xtensa/include/asm/unistd.h            |   2 +-
 arch/xtensa/kernel/syscalls/syscall.tbl     |  71 ++++++++----
 drivers/ptp/ptp_clock.c                     |   2 +-
 fs/aio.c                                    |  10 +-
 fs/select.c                                 |   4 +-
 fs/timerfd.c                                |   4 +-
 fs/utimes.c                                 |  10 +-
 include/linux/compat.h                      | 104 +----------------
 include/linux/posix-clock.h                 |   2 +-
 include/linux/syscalls.h                    |  65 ++++++++++-
 include/linux/time32.h                      |  32 +++++-
 include/linux/time64.h                      |   8 --
 include/linux/timex.h                       |   4 +-
 include/uapi/asm-generic/unistd.h           | 103 ++++++++++++-----
 include/uapi/linux/time.h                   |   4 -
 include/uapi/linux/timex.h                  |  39 +++++++
 ipc/mqueue.c                                |  16 +--
 ipc/sem.c                                   |   2 +-
 kernel/compat.c                             |  64 -----------
 kernel/futex.c                              |   2 +-
 kernel/sched/core.c                         |   5 +-
 kernel/signal.c                             |   2 +-
 kernel/sys_ni.c                             |  18 +--
 kernel/time/hrtimer.c                       |   2 +-
 kernel/time/ntp.c                           |  18 +--
 kernel/time/ntp_internal.h                  |   2 +-
 kernel/time/posix-clock.c                   |   2 +-
 kernel/time/posix-stubs.c                   |  25 ++--
 kernel/time/posix-timers.c                  |  72 ++++++------
 kernel/time/posix-timers.h                  |   2 +-
 kernel/time/time.c                          |  92 ++++++++++++---
 kernel/time/timekeeping.c                   |   4 +-
 net/compat.c                                |   2 +-
 scripts/checksyscalls.sh                    |  40 +++++++
 65 files changed, 1264 insertions(+), 713 deletions(-)

Comments

Heiko Carstens Jan. 10, 2019, 8:55 p.m. UTC | #1
On Thu, Jan 10, 2019 at 06:22:12PM +0100, Arnd Bergmann wrote:
> diff --git a/arch/s390/kernel/syscalls/syscall.tbl b/arch/s390/kernel/syscalls/syscall.tbl
> index f84ea364a302..b3199a744731 100644
> --- a/arch/s390/kernel/syscalls/syscall.tbl
> +++ b/arch/s390/kernel/syscalls/syscall.tbl
> @@ -20,7 +20,7 @@
>  10   common	unlink			sys_unlink			compat_sys_unlink
>  11   common	execve			sys_execve			compat_sys_execve
>  12   common	chdir			sys_chdir			compat_sys_chdir
> -13   32		time			-				compat_sys_time
> +13   32		time			-				sys_time32
>  14   common	mknod			sys_mknod			compat_sys_mknod
>  15   common	chmod			sys_chmod			compat_sys_chmod
>  16   32		lchown			-				compat_sys_s390_lchown16
> @@ -30,11 +30,11 @@
>  22   common	umount			sys_oldumount			compat_sys_oldumount
>  23   32		setuid			-				compat_sys_s390_setuid16
>  24   32		getuid			-				compat_sys_s390_getuid16
> -25   32		stime			-				compat_sys_stime
> +25   32		stime			-				sys_stime32
>  26   common	ptrace			sys_ptrace			compat_sys_ptrace
>  27   common	alarm			sys_alarm			sys_alarm
>  29   common	pause			sys_pause			sys_pause
> -30   common	utime			sys_utime			compat_sys_utime
> +30   common	utime			sys_utime			sys_utime32
...(and more)...

All of them need compat wrappers to clear the uppermost 33 bits of
user space pointers. I assume there is no new *32 system call which
takes u64/s64 arguments; so the pointers should be the only problem.