The branch stable/13 has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=7ac1c755d05777620e47254d0526df82155df58e

commit 7ac1c755d05777620e47254d0526df82155df58e
Author:     Konstantin Belousov <[email protected]>
AuthorDate: 2023-09-25 16:33:36 +0000
Commit:     Konstantin Belousov <[email protected]>
CommitDate: 2023-10-09 03:42:17 +0000

    sysentvec: add SV_SIGSYS flag
    
    (cherry picked from commit b82b4ae752501469053979393e33bbfa74fbc9d2)
---
 sys/amd64/amd64/elf_machdep.c       | 6 ++++--
 sys/arm/arm/elf_machdep.c           | 2 +-
 sys/arm64/arm64/elf32_machdep.c     | 2 +-
 sys/arm64/arm64/elf_machdep.c       | 2 +-
 sys/compat/ia32/ia32_sysvec.c       | 3 ++-
 sys/i386/i386/elf_machdep.c         | 2 +-
 sys/kern/imgact_aout.c              | 6 ++++--
 sys/kern/kern_sig.c                 | 8 +++++---
 sys/powerpc/powerpc/elf32_machdep.c | 2 +-
 sys/powerpc/powerpc/elf64_machdep.c | 4 ++--
 sys/riscv/riscv/elf_machdep.c       | 2 +-
 sys/sys/sysent.h                    | 1 +
 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))

Reply via email to