aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2023-09-25 16:33:36 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2023-10-09 03:42:17 +0000
commit7ac1c755d05777620e47254d0526df82155df58e (patch)
treeefd293d620bc5000f4cfc71929a0c4caf765af46
parent62a8639f7012603b3b525409b89c7b6a197c6dd3 (diff)
downloadsrc-7ac1c755d05777620e47254d0526df82155df58e.tar.gz
src-7ac1c755d05777620e47254d0526df82155df58e.zip
sysentvec: add SV_SIGSYS flag
(cherry picked from commit b82b4ae752501469053979393e33bbfa74fbc9d2)
-rw-r--r--sys/amd64/amd64/elf_machdep.c6
-rw-r--r--sys/arm/arm/elf_machdep.c2
-rw-r--r--sys/arm64/arm64/elf32_machdep.c2
-rw-r--r--sys/arm64/arm64/elf_machdep.c2
-rw-r--r--sys/compat/ia32/ia32_sysvec.c3
-rw-r--r--sys/i386/i386/elf_machdep.c2
-rw-r--r--sys/kern/imgact_aout.c6
-rw-r--r--sys/kern/kern_sig.c8
-rw-r--r--sys/powerpc/powerpc/elf32_machdep.c2
-rw-r--r--sys/powerpc/powerpc/elf64_machdep.c4
-rw-r--r--sys/riscv/riscv/elf_machdep.c2
-rw-r--r--sys/sys/sysent.h1
12 files changed, 24 insertions, 16 deletions
diff --git a/sys/amd64/amd64/elf_machdep.c b/sys/amd64/amd64/elf_machdep.c
index 4cce1aa85970..6e966ec559f3 100644
--- a/sys/amd64/amd64/elf_machdep.c
+++ b/sys/amd64/amd64/elf_machdep.c
@@ -81,7 +81,8 @@ struct sysentvec elf64_freebsd_sysvec_la48 = {
.sv_fixlimit = NULL,
.sv_maxssiz = NULL,
.sv_flags = SV_ABI_FREEBSD | SV_ASLR | SV_LP64 | SV_SHP |
- SV_TIMEKEEP | SV_RNG_SEED_VER | SV_DSO_SIG,
+ SV_TIMEKEEP | SV_RNG_SEED_VER | SV_DSO_SIG |
+ SV_SIGSYS,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
.sv_syscallnames = syscallnames,
@@ -124,7 +125,8 @@ struct sysentvec elf64_freebsd_sysvec_la57 = {
.sv_fixlimit = NULL,
.sv_maxssiz = NULL,
.sv_flags = SV_ABI_FREEBSD | SV_ASLR | SV_LP64 | SV_SHP |
- SV_TIMEKEEP | SV_RNG_SEED_VER | SV_DSO_SIG,
+ SV_TIMEKEEP | SV_RNG_SEED_VER | SV_DSO_SIG |
+ SV_SIGSYS,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
.sv_syscallnames = syscallnames,
diff --git a/sys/arm/arm/elf_machdep.c b/sys/arm/arm/elf_machdep.c
index a7de7deb73e1..0f31217d060e 100644
--- a/sys/arm/arm/elf_machdep.c
+++ b/sys/arm/arm/elf_machdep.c
@@ -88,7 +88,7 @@ struct sysentvec elf32_freebsd_sysvec = {
.sv_maxssiz = NULL,
.sv_flags =
SV_ASLR | SV_SHP | SV_TIMEKEEP | SV_RNG_SEED_VER |
- SV_ABI_FREEBSD | SV_ILP32,
+ SV_ABI_FREEBSD | SV_ILP32 | SV_SIGSYS,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
.sv_syscallnames = syscallnames,
diff --git a/sys/arm64/arm64/elf32_machdep.c b/sys/arm64/arm64/elf32_machdep.c
index edd285d8b482..c59571808cd3 100644
--- a/sys/arm64/arm64/elf32_machdep.c
+++ b/sys/arm64/arm64/elf32_machdep.c
@@ -105,7 +105,7 @@ static struct sysentvec elf32_freebsd_sysvec = {
.sv_fixlimit = NULL, // XXX
.sv_maxssiz = NULL,
.sv_flags = SV_ABI_FREEBSD | SV_ILP32 | SV_SHP | SV_TIMEKEEP |
- SV_RNG_SEED_VER,
+ SV_RNG_SEED_VER | SV_SIGSYS,
.sv_set_syscall_retval = freebsd32_set_syscall_retval,
.sv_fetch_syscall_args = freebsd32_fetch_syscall_args,
.sv_syscallnames = freebsd32_syscallnames,
diff --git a/sys/arm64/arm64/elf_machdep.c b/sys/arm64/arm64/elf_machdep.c
index f190316ae3ec..5ca289326df2 100644
--- a/sys/arm64/arm64/elf_machdep.c
+++ b/sys/arm64/arm64/elf_machdep.c
@@ -83,7 +83,7 @@ static struct sysentvec elf64_freebsd_sysvec = {
.sv_fixlimit = NULL,
.sv_maxssiz = NULL,
.sv_flags = SV_SHP | SV_TIMEKEEP | SV_ABI_FREEBSD | SV_LP64 |
- SV_ASLR | SV_RNG_SEED_VER,
+ SV_ASLR | SV_RNG_SEED_VER | SV_SIGSYS,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
.sv_syscallnames = syscallnames,
diff --git a/sys/compat/ia32/ia32_sysvec.c b/sys/compat/ia32/ia32_sysvec.c
index 84e3c674ee41..62108cf86ab9 100644
--- a/sys/compat/ia32/ia32_sysvec.c
+++ b/sys/compat/ia32/ia32_sysvec.c
@@ -128,7 +128,8 @@ struct sysentvec ia32_freebsd_sysvec = {
.sv_fixlimit = ia32_fixlimit,
.sv_maxssiz = &ia32_maxssiz,
.sv_flags = SV_ABI_FREEBSD | SV_ASLR | SV_IA32 | SV_ILP32 |
- SV_SHP | SV_TIMEKEEP | SV_RNG_SEED_VER | SV_DSO_SIG,
+ SV_SHP | SV_TIMEKEEP | SV_RNG_SEED_VER |
+ SV_DSO_SIG | SV_SIGSYS,
.sv_set_syscall_retval = ia32_set_syscall_retval,
.sv_fetch_syscall_args = ia32_fetch_syscall_args,
.sv_syscallnames = freebsd32_syscallnames,
diff --git a/sys/i386/i386/elf_machdep.c b/sys/i386/i386/elf_machdep.c
index c40b27462ab4..58f3c23dfcb0 100644
--- a/sys/i386/i386/elf_machdep.c
+++ b/sys/i386/i386/elf_machdep.c
@@ -76,7 +76,7 @@ struct sysentvec elf32_freebsd_sysvec = {
.sv_fixlimit = NULL,
.sv_maxssiz = NULL,
.sv_flags = SV_ABI_FREEBSD | SV_ASLR | SV_IA32 | SV_ILP32 |
- SV_SHP | SV_TIMEKEEP | SV_RNG_SEED_VER,
+ SV_SHP | SV_TIMEKEEP | SV_RNG_SEED_VER | SV_SIGSYS,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
.sv_syscallnames = syscallnames,
diff --git a/sys/kern/imgact_aout.c b/sys/kern/imgact_aout.c
index 002bee840379..23384d383e2c 100644
--- a/sys/kern/imgact_aout.c
+++ b/sys/kern/imgact_aout.c
@@ -92,7 +92,8 @@ struct sysentvec aout_sysvec = {
.sv_setregs = exec_setregs,
.sv_fixlimit = NULL,
.sv_maxssiz = NULL,
- .sv_flags = SV_ABI_FREEBSD | SV_AOUT | SV_IA32 | SV_ILP32,
+ .sv_flags = SV_ABI_FREEBSD | SV_AOUT | SV_IA32 | SV_ILP32 |
+ SV_SIGSYS,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
.sv_syscallnames = syscallnames,
@@ -142,7 +143,8 @@ struct sysentvec aout_sysvec = {
.sv_setregs = ia32_setregs,
.sv_fixlimit = ia32_fixlimit,
.sv_maxssiz = &ia32_maxssiz,
- .sv_flags = SV_ABI_FREEBSD | SV_AOUT | SV_IA32 | SV_ILP32,
+ .sv_flags = SV_ABI_FREEBSD | SV_AOUT | SV_IA32 | SV_ILP32 |
+ SV_SIGSYS,
.sv_set_syscall_retval = ia32_set_syscall_retval,
.sv_fetch_syscall_args = ia32_fetch_syscall_args,
.sv_syscallnames = freebsd32_syscallnames,
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 04ca12cc5d84..5dd56e0ec851 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -4128,9 +4128,11 @@ nosys(struct thread *td, struct nosys_args *args)
p = td->td_proc;
- PROC_LOCK(p);
- tdsignal(td, SIGSYS);
- PROC_UNLOCK(p);
+ if (SV_PROC_FLAG(p, SV_SIGSYS) != 0) {
+ PROC_LOCK(p);
+ tdsignal(td, SIGSYS);
+ PROC_UNLOCK(p);
+ }
if (kern_lognosys == 1 || kern_lognosys == 3) {
uprintf("pid %d comm %s: nosys %d\n", p->p_pid, p->p_comm,
td->td_sa.code);
diff --git a/sys/powerpc/powerpc/elf32_machdep.c b/sys/powerpc/powerpc/elf32_machdep.c
index a689860b9a25..5611c18920ec 100644
--- a/sys/powerpc/powerpc/elf32_machdep.c
+++ b/sys/powerpc/powerpc/elf32_machdep.c
@@ -123,7 +123,7 @@ struct sysentvec elf32_freebsd_sysvec = {
#endif
.sv_maxssiz = NULL,
.sv_flags = SV_ABI_FREEBSD | SV_ILP32 | SV_SHP | SV_ASLR |
- SV_TIMEKEEP | SV_RNG_SEED_VER,
+ SV_TIMEKEEP | SV_RNG_SEED_VER | SV_SIGSYS,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
.sv_shared_page_base = FREEBSD32_SHAREDPAGE,
diff --git a/sys/powerpc/powerpc/elf64_machdep.c b/sys/powerpc/powerpc/elf64_machdep.c
index 118dedda2a71..a1cf7d41e38a 100644
--- a/sys/powerpc/powerpc/elf64_machdep.c
+++ b/sys/powerpc/powerpc/elf64_machdep.c
@@ -85,7 +85,7 @@ struct sysentvec elf64_freebsd_sysvec_v1 = {
.sv_fixlimit = NULL,
.sv_maxssiz = NULL,
.sv_flags = SV_ABI_FREEBSD | SV_LP64 | SV_SHP | SV_ASLR |
- SV_TIMEKEEP | SV_RNG_SEED_VER,
+ SV_TIMEKEEP | SV_RNG_SEED_VER | SV_SIGSYS,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
.sv_syscallnames = syscallnames,
@@ -128,7 +128,7 @@ struct sysentvec elf64_freebsd_sysvec_v2 = {
.sv_fixlimit = NULL,
.sv_maxssiz = NULL,
.sv_flags = SV_ABI_FREEBSD | SV_LP64 | SV_SHP |
- SV_TIMEKEEP | SV_RNG_SEED_VER,
+ SV_TIMEKEEP | SV_RNG_SEED_VER | SV_SIGSYS,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
.sv_syscallnames = syscallnames,
diff --git a/sys/riscv/riscv/elf_machdep.c b/sys/riscv/riscv/elf_machdep.c
index 52e993a21abb..23d4ea885378 100644
--- a/sys/riscv/riscv/elf_machdep.c
+++ b/sys/riscv/riscv/elf_machdep.c
@@ -87,7 +87,7 @@ static struct sysentvec elf64_freebsd_sysvec = {
.sv_fixlimit = NULL,
.sv_maxssiz = NULL,
.sv_flags = SV_ABI_FREEBSD | SV_LP64 | SV_SHP | SV_TIMEKEEP |
- SV_ASLR | SV_RNG_SEED_VER,
+ SV_ASLR | SV_RNG_SEED_VER | SV_SIGSYS,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
.sv_syscallnames = syscallnames,
diff --git a/sys/sys/sysent.h b/sys/sys/sysent.h
index 2d8631b94113..77f59b968346 100644
--- a/sys/sys/sysent.h
+++ b/sys/sys/sysent.h
@@ -172,6 +172,7 @@ struct sysentvec {
#define SV_SIG_DISCIGN 0x200000 /* Do not discard ignored signals */
#define SV_SIG_WAITNDQ 0x400000 /* Wait does not dequeue SIGCHLD */
#define SV_DSO_SIG 0x800000 /* Signal trampoline packed in dso */
+#define SV_SIGSYS 0x1000000 /* SIGSYS for non-existing syscall. NOTE: different value from HEAD */
#define SV_ABI_MASK 0xff
#define SV_PROC_FLAG(p, x) ((p)->p_sysent->sv_flags & (x))