The purpose of this patch series is:
1. We can easily add/modify/delete system call by changing entry
in syscall.tbl file. No need to manually edit many files.
2. It is easy to unify the system call implementation across all
the architectures.
The system call tables are in different format in all architecture
and it will be difficult to manually add or modify the system calls
manually in the respective files. To make it easy by keeping a script
and which'll generate the header file and syscall table file so this
change will unify the implementation across all architectures.
syscall.tbl contains the list of available system calls along with
system call number and corresponding entry point. Add a new system
call in this architecture will be possible by adding new entry in
the syscall.tbl file.
Adding a new table entry consisting of:
- System call number.
- ABI.
- System call name.
- Entry point name.
Important thing to note, I have added this support only for 32-bit
ABI. It seems like no one using 64-bit ABI for long time. But it is
very easy to add the support for64-bit. Please let me know if any-
one need this support:)
ARM, s390 and x86 architecuture does exist the similar support. I
leverage their implementation to come up with a generic solution.
I have done the same support for work for alpha, m68k, microblaze,
ia64, mips, parisc, powerpc, sparc, and xtensa. But I started sending
the patch for one architecuture for review. Below mentioned git
repository contains more details.
Git repo:- https://github.com/frzkhn/system_call_table_generator/
Finally, this is the ground work for solving the Y2038 issue. We
need to add/change two dozen of system calls to solve Y2038 issue.
So this patch series will help to easily modify from existing
system call to Y2038 compatible system calls.
I started working system call table generation on 4.17-rc1. I used
marcin's script - https://github.com/hrw/syscalls-table to generate
the syscall.tbl file. And this will be the input to the system call
table generation script. But there are couple system call got add
in the latest rc release. If run Marcin's script on latest release,
it will generate a different syscall.tbl. But I still use the old
file - syscall.tbl and once all review got over I'll update
syscall.tbl alone w.r.to the tip of the kernel. The impact of this
is, few of the system call won't work.
Firoz Khan (3):
sh: Rename NR_syscalls macro to __NR_syscalls
sh: Added system call table generation support
sh: uapi header and system call table file generation
arch/sh/Makefile | 3 +
arch/sh/include/asm/Kbuild | 2 +
arch/sh/include/asm/ftrace.h | 2 +-
arch/sh/include/uapi/asm/Kbuild | 2 +
arch/sh/include/uapi/asm/unistd_32.h | 2 +-
arch/sh/include/uapi/asm/unistd_64.h | 2 +-
arch/sh/kernel/Makefile | 2 +-
arch/sh/kernel/cpu/sh5/entry.S | 2 +-
arch/sh/kernel/entry-common.S | 2 +-
arch/sh/kernel/syscall.S | 9 +
arch/sh/kernel/syscalls/Makefile | 37 ++++
arch/sh/kernel/syscalls/syscall.tbl | 388 ++++++++++++++++++++++++++++++++
arch/sh/kernel/syscalls/syscallhdr.sh | 33 +++
arch/sh/kernel/syscalls/syscalltbl.sh | 28 +++
arch/sh/kernel/syscalls_32.S | 402 ----------------------------------
15 files changed, 508 insertions(+), 408 deletions(-)
create mode 100644 arch/sh/kernel/syscall.S
create mode 100644 arch/sh/kernel/syscalls/Makefile
create mode 100644 arch/sh/kernel/syscalls/syscall.tbl
create mode 100644 arch/sh/kernel/syscalls/syscallhdr.sh
create mode 100644 arch/sh/kernel/syscalls/syscalltbl.sh
delete mode 100644 arch/sh/kernel/syscalls_32.S
--
1.9.1
The series transitions the ppoll, io_getevents, and pselect syscalls
to be y2038 safe.
This is part of the work proceeding for syscalls for y2038.
It is based on the series [1] from Arnd Bergmann.
The overview of the series is as below:
1. Refactor sigmask handling logic for the above syscalls.
2. Provide y2038 safe versions of syscalls for all ABIs.
[1] https://lkml.org/lkml/2018/8/27/651
Changes since v2:
* remove 64BIT_TIME conditional for ppoll, pselect,
io_getpevents as per review comments
Changes since v1:
* fixed bug pointed out by arnd
Deepa Dinamani (5):
signal: Add set_user_sigmask()
signal: Add restore_user_sigmask()
ppoll: use __kernel_timespec
pselect6: use __kernel_timespec
io_pgetevents: use __kernel_timespec
fs/aio.c | 135 ++++++++++-----
fs/eventpoll.c | 52 +-----
fs/select.c | 360 ++++++++++++++++++++++-----------------
include/linux/compat.h | 20 +++
include/linux/signal.h | 4 +
include/linux/syscalls.h | 20 ++-
kernel/signal.c | 78 +++++++++
7 files changed, 427 insertions(+), 242 deletions(-)
--
2.17.1
Hi Thomas,
Please pull the system call changes into a branch of the tip tree.
These are the ones I posted right after rc1, with the addition of
two bug fixes that were contributed by Guenther and the kbuild test
robot.
I've had the changes in linux-next since then and not received
any other bug reports or feedback.
I panicked a little at one point when I realized that there is
a sparc64 specific bug in some of my patches, but I then
found that at least this series is not affected at all.
Arnd
The following changes since commit 5b394b2ddf0347bef56e50c69a58773c94343ff3:
Linux 4.19-rc1 (2018-08-26 14:11:59 -0700)
are available in the Git repository at:
git+ssh://git@ra.kernel.org:/pub/scm/linux/kernel/git/arnd/playground.git
tags/y2038
for you to fetch changes up to 67314ec7b0250290cc85eaa7a2f88a8ddb9e8547:
RISC-V: Request newstat syscalls (2018-09-05 22:44:21 +0200)
----------------------------------------------------------------
y2038: convert more syscalls
Here is another set of system call changes to prepare the change over to
64-bit time_t. As before, the strategy is to change system calls that
take a 'struct timespec' argument over to 'struct __kernel_timespec',
which for now is defined to be the same but will get redefined to use a
64-bit time_t argument once we are ready to modify the system call tables.
The major change from previous patches is that the plan is no longer
to directly use the 'compat' system calls for providing compatibility
with the existing 32-bit time_t based entry points. Instead, we rename
the compat code to something that makes more sense on 32-bit architectures,
e.g. compat_timespec becomes old_timespec32.
With the renamed types in place, we change over the 'stat' and 'utimes'
families of system calls, sched_rr_get_interval, recvmmsg and
rt_sigtimedwait. Another series for poll, select and io_pgetevents is
currently being tested.
----------------------------------------------------------------
Arnd Bergmann (14):
y2038: remove unused time interfaces
y2038: make do_gettimeofday() and get_seconds() inline
y2038: globally rename compat_time to old_time32
y2038: Remove newstat family from default syscall set
y2038: Remove stat64 family from default syscall set
asm-generic: Move common compat types to asm-generic/compat.h
asm-generic: Remove unneeded __ARCH_WANT_SYS_LLSEEK macro
asm-generic: Remove empty asm/unistd.h
y2038: Change sys_utimensat() to use __kernel_timespec
y2038: Compile utimes()/futimesat() conditionally
y2038: utimes: Rework #ifdef guards for compat syscalls
y2038: sched: Change sched_rr_get_interval to use __kernel_timespec
y2038: socket: Change recvmmsg to use __kernel_timespec
y2038: signal: Change rt_sigtimedwait to use __kernel_timespec
Guenter Roeck (1):
RISC-V: Request newstat syscalls
kbuild test robot (1):
y2038: __get_old_timespec32() can be static
arch/alpha/include/asm/unistd.h | 2 ++
arch/arc/include/uapi/asm/unistd.h | 1 +
arch/arm/include/asm/unistd.h | 4 ++--
arch/arm64/include/asm/compat.h | 26 +++++---------------------
arch/arm64/include/asm/stat.h | 2 +-
arch/arm64/include/asm/unistd.h | 2 +-
arch/arm64/include/uapi/asm/unistd.h | 1 +
arch/c6x/include/uapi/asm/unistd.h | 1 +
arch/h8300/include/uapi/asm/unistd.h | 1 +
arch/hexagon/include/uapi/asm/unistd.h | 1 +
arch/ia64/include/asm/unistd.h | 3 +++
arch/m68k/include/asm/unistd.h | 2 +-
arch/microblaze/include/asm/unistd.h | 2 +-
arch/mips/include/asm/compat.h | 28 +++++-----------------------
arch/mips/include/asm/unistd.h | 3 ++-
arch/mips/kernel/binfmt_elfn32.c | 14 +++++++-------
arch/mips/kernel/binfmt_elfo32.c | 14 +++++++-------
arch/nds32/include/uapi/asm/unistd.h | 1 +
arch/nios2/include/uapi/asm/unistd.h | 1 +
arch/openrisc/include/uapi/asm/unistd.h | 1 +
arch/parisc/include/asm/compat.h | 24 +++++-------------------
arch/parisc/include/asm/unistd.h | 3 ++-
arch/powerpc/include/asm/compat.h | 24 +++++-------------------
arch/powerpc/include/asm/unistd.h | 3 ++-
arch/powerpc/kernel/asm-offsets.c | 8 ++++----
arch/powerpc/oprofile/backtrace.c | 2 +-
arch/riscv/include/asm/unistd.h | 1 +
arch/s390/include/asm/compat.h | 18 ++----------------
arch/s390/include/asm/unistd.h | 3 ++-
arch/sh/include/asm/unistd.h | 2 +-
arch/sparc/include/asm/compat.h | 25 +++++--------------------
arch/sparc/include/asm/unistd.h | 3 ++-
arch/unicore32/include/uapi/asm/unistd.h | 1 +
arch/x86/include/asm/compat.h | 19 ++-----------------
arch/x86/include/asm/unistd.h | 3 ++-
arch/xtensa/include/asm/unistd.h | 2 +-
fs/aio.c | 8 ++++----
fs/compat_binfmt_elf.c | 2 +-
fs/read_write.c | 2 +-
fs/select.c | 20 ++++++++++----------
fs/stat.c | 3 +++
fs/timerfd.c | 12 ++++++------
fs/utimes.c | 73
+++++++++++++++++++++++++++++++++++--------------------------------------
include/asm-generic/compat.h | 24 +++++++++++++++++++++++-
include/asm-generic/unistd.h | 13 -------------
include/linux/compat.h | 101
+++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------
include/linux/compat_time.h | 32 --------------------------------
include/linux/elfcore-compat.h | 8 ++++----
include/linux/restart_block.h | 4 ++--
include/linux/socket.h | 4 ++--
include/linux/syscalls.h | 21 ++++++++++++---------
include/linux/time32.h | 78
+++++++++++++++++++++++++++++++++++++++++-------------------------------------
include/linux/timekeeping.h | 12 ------------
include/linux/timekeeping32.h | 53
+++++++----------------------------------------------
include/uapi/asm-generic/unistd.h | 2 ++
ipc/mqueue.c | 8 ++++----
ipc/msg.c | 6 +++---
ipc/sem.c | 10 +++++-----
ipc/shm.c | 6 +++---
ipc/syscall.c | 2 +-
ipc/util.h | 2 +-
kernel/compat.c | 8 ++++----
kernel/futex_compat.c | 2 +-
kernel/sched/core.c | 8 ++++----
kernel/signal.c | 19 ++++++++++---------
kernel/time/hrtimer.c | 8 ++++----
kernel/time/posix-stubs.c | 18 +++++++++---------
kernel/time/posix-timers.c | 30 +++++++++++++++---------------
kernel/time/time.c | 97
++++++++++++++++++++++++++++++++++++++-----------------------------------------------------------
kernel/time/timekeeping.c | 24 ------------------------
net/compat.c | 10 +++++-----
net/socket.c | 18 ++++++++----------
72 files changed, 398 insertions(+), 601 deletions(-)
delete mode 100644 include/asm-generic/unistd.h
delete mode 100644 include/linux/compat_time.h
Reply
Forward
The series transitions the ppoll, io_getevents, and pselect syscalls
to be y2038 safe.
This is part of the work proceeding for syscalls for y2038.
It is based on the series [1] from Arnd Bergmann.
The overview of the series is as below:
1. Refactor sigmask handling logic for the above syscalls.
2. Provide y2038 safe versions of syscalls for all ABIs.
[1] https://lkml.org/lkml/2018/8/27/651
Changes since v1:
* fixed bug pointed out by arnd
Deepa Dinamani (5):
signal: Add set_user_sigmask()
signal: Add restore_user_sigmask()
ppoll: use __kernel_timespec
pselect6: use __kernel_timespec
io_pgetevents: use __kernel_timespec
fs/aio.c | 138 ++++++++++-----
fs/eventpoll.c | 52 +-----
fs/select.c | 367 +++++++++++++++++++++++----------------
include/linux/compat.h | 20 +++
include/linux/signal.h | 4 +
include/linux/syscalls.h | 20 ++-
kernel/signal.c | 78 +++++++++
7 files changed, 437 insertions(+), 242 deletions(-)
--
2.17.1
The series transitions the ppoll, io_getevents, and pselect syscalls
to be y2038 safe.
This is part of the work proceeding for syscalls for y2038.
It is based on the series [1] from Arnd Bergmann.
The overview of the series is as below:
1. Refactor sigmask handling logic for the above syscalls.
2. Provide y2038 safe versions of syscalls for all ABIs.
[1] https://lkml.org/lkml/2018/8/27/651
Deepa Dinamani (5):
signal: Add set_user_sigmask()
signal: Add restore_user_sigmask()
ppoll: use __kernel_timespec
pselect6: use __kernel_timespec
io_pgetevents: use __kernel_timespec
fs/aio.c | 138 ++++++++++-----
fs/eventpoll.c | 52 +-----
fs/select.c | 367 +++++++++++++++++++++++----------------
include/linux/compat.h | 20 +++
include/linux/signal.h | 4 +
include/linux/syscalls.h | 20 ++-
kernel/signal.c | 78 +++++++++
7 files changed, 437 insertions(+), 242 deletions(-)
--
2.17.1
The old rtc driver is getting in the way of some compat_ioctl
simplification. Looking up the loongson64 git history, it seems
that everyone uses the more modern but compatible RTC_CMOS driver
anyway, so let's remove the special case for loongson64.
Signed-off-by: Arnd Bergmann <arnd(a)arndb.de>
---
arch/mips/Kconfig | 2 +-
drivers/char/Kconfig | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 35511999156a..c695825d9377 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -75,7 +75,7 @@ config MIPS
select MODULES_USE_ELF_RELA if MODULES && 64BIT
select MODULES_USE_ELF_REL if MODULES
select PERF_USE_VMALLOC
- select RTC_LIB if !MACH_LOONGSON64
+ select RTC_LIB
select SYSCTL_EXCEPTION_TRACE
select VIRT_TO_BUS
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
index ce277ee0a28a..131b4c300050 100644
--- a/drivers/char/Kconfig
+++ b/drivers/char/Kconfig
@@ -268,7 +268,7 @@ if RTC_LIB=n
config RTC
tristate "Enhanced Real Time Clock Support (legacy PC RTC driver)"
- depends on ALPHA || (MIPS && MACH_LOONGSON64)
+ depends on ALPHA
---help---
If you say Y here and create a character special file /dev/rtc with
major number 10 and minor number 135 using mknod ("man mknod"), you
--
2.18.0
The VIDEO_GET_EVENT and VIDEO_STILLPICTURE was added back in 2005 but
it never worked because the command number is wrong.
Using the right command number means we have a better chance of them
actually doing the right thing, though clearly nobody has ever tried
it successfully.
I noticed these while auditing the remaining users of compat_time_t
for y2038 bugs. This one is fine in that regard, it just never did
anything.
Fixes: 6e87abd0b8cb ("[DVB]: Add compat ioctl handling.")
Signed-off-by: Arnd Bergmann <arnd(a)arndb.de>
---
fs/compat_ioctl.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
index a9b00942e87d..0c46ce224590 100644
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
@@ -141,6 +141,7 @@ struct compat_video_event {
unsigned int frame_rate;
} u;
};
+#define VIDEO_GET_EVENT32 _IOR('o', 28, struct compat_video_event)
static int do_video_get_event(struct file *file,
unsigned int cmd, struct compat_video_event __user *up)
@@ -152,7 +153,7 @@ static int do_video_get_event(struct file *file,
if (kevent == NULL)
return -EFAULT;
- err = do_ioctl(file, cmd, (unsigned long)kevent);
+ err = do_ioctl(file, VIDEO_GET_EVENT, (unsigned long)kevent);
if (!err) {
err = convert_in_user(&kevent->type, &up->type);
err |= convert_in_user(&kevent->timestamp, &up->timestamp);
@@ -171,6 +172,7 @@ struct compat_video_still_picture {
compat_uptr_t iFrame;
int32_t size;
};
+#define VIDEO_STILLPICTURE32 _IOW('o', 30, struct compat_video_still_picture)
static int do_video_stillpicture(struct file *file,
unsigned int cmd, struct compat_video_still_picture __user *up)
@@ -193,7 +195,7 @@ static int do_video_stillpicture(struct file *file,
if (err)
return -EFAULT;
- err = do_ioctl(file, cmd, (unsigned long) up_native);
+ err = do_ioctl(file, VIDEO_STILLPICTURE, (unsigned long) up_native);
return err;
}
@@ -1305,9 +1307,9 @@ static long do_ioctl_trans(unsigned int cmd,
return rtc_ioctl(file, cmd, argp);
/* dvb */
- case VIDEO_GET_EVENT:
+ case VIDEO_GET_EVENT32:
return do_video_get_event(file, cmd, argp);
- case VIDEO_STILLPICTURE:
+ case VIDEO_STILLPICTURE32:
return do_video_stillpicture(file, cmd, argp);
}
--
2.18.0
Support for handling the PPPOEIOCSFWD ioctl in compat mode was added in
linux-2.5.69 along with hundreds of other commands, but was always broken
sincen only the structure is compatible, but the command number is not,
due to the size being sizeof(size_t), or at first sizeof(sizeof((struct
sockaddr_pppox)), which is different on 64-bit architectures.
Fix it by defining a separate command code that matches the 32-bit
version, and marking that one as compatible.
This should apply to all stable kernels.
Signed-off-by: Arnd Bergmann <arnd(a)arndb.de>
---
drivers/net/ppp/pppoe.c | 4 ++++
fs/compat_ioctl.c | 2 +-
include/linux/if_pppox.h | 2 ++
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
index ce61231e96ea..d1c3f9292c54 100644
--- a/drivers/net/ppp/pppoe.c
+++ b/drivers/net/ppp/pppoe.c
@@ -57,6 +57,7 @@
*
*/
+#include <linux/compat.h>
#include <linux/string.h>
#include <linux/module.h>
#include <linux/kernel.h>
@@ -780,6 +781,9 @@ static int pppoe_ioctl(struct socket *sock, unsigned int cmd,
err = 0;
break;
+#ifdef CONFIG_COMPAT
+ case PPPOEIOCSFWD32:
+#endif
case PPPOEIOCSFWD:
{
struct pppox_sock *relay_po;
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
index a9b00942e87d..a8bb193fdfd5 100644
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
@@ -895,7 +895,7 @@ COMPATIBLE_IOCTL(PPPIOCATTCHAN)
COMPATIBLE_IOCTL(PPPIOCGCHAN)
COMPATIBLE_IOCTL(PPPIOCGL2TPSTATS)
/* PPPOX */
-COMPATIBLE_IOCTL(PPPOEIOCSFWD)
+COMPATIBLE_IOCTL(PPPOEIOCSFWD32)
COMPATIBLE_IOCTL(PPPOEIOCDFWD)
/* Big A */
/* sparc only */
diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h
index ba7a9b0c7c57..d221f1465f41 100644
--- a/include/linux/if_pppox.h
+++ b/include/linux/if_pppox.h
@@ -85,6 +85,8 @@ extern void unregister_pppox_proto(int proto_num);
extern void pppox_unbind_sock(struct sock *sk);/* delete ppp-channel binding */
extern int pppox_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
+#define PPPOEIOCSFWD32 _IOW(0xB1 ,0, compat_size_t)
+
/* PPPoX socket states */
enum {
PPPOX_NONE = 0, /* initial state */
--
2.18.0
The old rtc driver is getting in the way of some compat_ioctl
simplification. Looking up the loongson64 git history, it seems
that everyone uses the more modern but compatible RTC_CMOS driver
anyway, so let's remove the special case for loongson64.
Signed-off-by: Arnd Bergmann <arnd(a)arndb.de>
---
arch/mips/Kconfig | 2 +-
drivers/char/Kconfig | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 35511999156a..c695825d9377 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -75,7 +75,7 @@ config MIPS
select MODULES_USE_ELF_RELA if MODULES && 64BIT
select MODULES_USE_ELF_REL if MODULES
select PERF_USE_VMALLOC
- select RTC_LIB if !MACH_LOONGSON64
+ select RTC_LIB
select SYSCTL_EXCEPTION_TRACE
select VIRT_TO_BUS
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
index ce277ee0a28a..131b4c300050 100644
--- a/drivers/char/Kconfig
+++ b/drivers/char/Kconfig
@@ -268,7 +268,7 @@ if RTC_LIB=n
config RTC
tristate "Enhanced Real Time Clock Support (legacy PC RTC driver)"
- depends on ALPHA || (MIPS && MACH_LOONGSON64)
+ depends on ALPHA
---help---
If you say Y here and create a character special file /dev/rtc with
major number 10 and minor number 135 using mknod ("man mknod"), you
--
2.18.0