The sigtramp was calling sigreturn(2), and upon failure exit(2), which
authorderaadt <deraadt@openbsd.org>
Tue, 12 Dec 2023 07:37:20 +0000 (07:37 +0000)
committerderaadt <deraadt@openbsd.org>
Tue, 12 Dec 2023 07:37:20 +0000 (07:37 +0000)
doesn't make sense anymore.  It is better to just issue an illegal
instruction.
ok kettenis, with some misgivings about inconsistant approaches between
architectures.
In the future we could change sigreturn(2) to never return an exit code,
but always just terminate the process.  We stopped this system call
from being callable ages ago with msyscall(2), and there is no stub for
it in libc.. maybe that's the next step to take?

12 files changed:
sys/arch/amd64/amd64/locore.S
sys/arch/arm/arm/sigcode.S
sys/arch/arm64/arm64/locore.S
sys/arch/hppa/hppa/locore.S
sys/arch/i386/i386/locore.s
sys/arch/m88k/m88k/subr.S
sys/arch/macppc/macppc/locore.S
sys/arch/mips64/mips64/lcore_access.S
sys/arch/powerpc64/powerpc64/locore.S
sys/arch/riscv64/riscv64/locore.S
sys/arch/sh/sh/locore_subr.S
sys/arch/sparc64/sparc64/locore.s

index a3d496e..b36ab19 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.S,v 1.142 2023/12/10 16:56:01 deraadt Exp $    */
+/*     $OpenBSD: locore.S,v 1.143 2023/12/12 07:37:20 deraadt Exp $    */
 /*     $NetBSD: locore.S,v 1.13 2004/03/25 18:33:17 drochner Exp $     */
 
 /*
@@ -181,13 +181,10 @@ sigcodecall:
        syscall
        .globl  sigcoderet
 sigcoderet:
-       movq    $SYS_exit,%rax
-       syscall
-       _ALIGN_TRAPS
+       int3
 1:     JMP_RETPOLINE(rax)
        .globl  esigcode
 esigcode:
-
        .globl  sigfill
 sigfill:
        int3
index 70c0f54..b2402d8 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: sigcode.S,v 1.13 2023/12/10 16:56:01 deraadt Exp $    */
+/*     $OpenBSD: sigcode.S,v 1.14 2023/12/12 07:37:20 deraadt Exp $    */
 /*     $NetBSD: sigcode.S,v 1.6 2003/10/05 19:44:58 matt Exp $ */
 
 /*
@@ -63,14 +63,9 @@ sigcodecall:
        isb
        .globl  sigcoderet
 sigcoderet:
-       /* Well if that failed we better exit quick ! */
-       mov     r12, #SYS_exit
-       swi     0
-       dsb     nsh
-       isb
        .global esigcode
 esigcode:
-
+       /* FALLTHROUGH */
        .globl  sigfill
 sigfill:
        udf     #0
index 9f2faa0..771e7ef 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: locore.S,v 1.44 2023/12/10 16:56:01 deraadt Exp $ */
+/* $OpenBSD: locore.S,v 1.45 2023/12/12 07:37:20 deraadt Exp $ */
 /*-
  * Copyright (c) 2012-2014 Andrew Turner
  * All rights reserved.
@@ -372,16 +372,10 @@ sigcodecall:
        isb
        .globl  sigcoderet
 sigcoderet:
-
-       /* sigreturn failed, exit */
-       mov     x8, #SYS_exit
-       svc     0
-       dsb     nsh
-       isb
 END(sigcode)
        .global esigcode
 esigcode:
-
+       /* FALLTHROUGH */
        .globl  sigfill
 sigfill:
        udf     #0
index 28647e5..3c952c8 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.S,v 1.206 2023/12/10 16:56:01 deraadt Exp $    */
+/*     $OpenBSD: locore.S,v 1.207 2023/12/12 07:37:20 deraadt Exp $    */
 
 /*
  * Copyright (c) 1998-2004 Michael Shalayeff
@@ -2872,15 +2872,10 @@ sigcodecall:
         ldi    SYS_sigreturn, t1
        .globl  sigcoderet
 sigcoderet:
-
-       ldil    L%SYSCALLGATE, r1
-       copy    ret0, arg0
-       .call
-       ble     4(sr7, r1)
-       ldi     SYS_exit, t1
+       break   0,0
 ALTENTRY(esigcode)
-EXIT(sigcode)
 
+EXIT(sigcode)
        .globl  sigfill
 sigfill:
        break   0,0
index c3a7497..b25acfa 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.s,v 1.203 2023/12/10 16:56:01 deraadt Exp $    */
+/*     $OpenBSD: locore.s,v 1.204 2023/12/12 07:37:20 deraadt Exp $    */
 /*     $NetBSD: locore.s,v 1.145 1996/05/03 19:41:19 christos Exp $    */
 
 /*-
@@ -346,11 +346,9 @@ sigcodecall:
        int     $0x80                   # enter kernel with args on stack
        .globl  sigcoderet
 sigcoderet:
-       movl    $SYS_exit,%eax
-       int     $0x80                   # exit if sigreturn fails
        .globl  esigcode
 esigcode:
-
+       /* FALLTHROUGH */
        .globl  sigfill
 sigfill:
        int3
index 69d79fe..ff73eec 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: subr.S,v 1.30 2023/12/10 16:56:01 deraadt Exp $   */
+/* $OpenBSD: subr.S,v 1.31 2023/12/12 07:37:21 deraadt Exp $   */
 /*
  * Mach Operating System
  * Copyright (c) 1993-1992 Carnegie Mellon University
@@ -1138,16 +1138,8 @@ GLOBAL(sigcoderet)
 #ifdef dontbother              /* sigreturn will not return unless it fails */
        NOP                     | success return
 #endif
-       or      %r13, %r0,  SYS_exit
-       tb0     0,    %r0,  450 /* syscall trap, exit */
-       /*
-        * this never returns, but we need to provide fetchable instructions
-        * for the 88100 pipeline.
-        */
-       NOP
-       NOP
 GLOBAL(esigcode)
-
+       /* FALLTHROUGH */
 GLOBAL(sigfill)
        tb0     0, %r0, 130     /* breakpoint */
 GLOBAL(sigfillsiz)
index 76ed02f..d1c59bf 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.S,v 1.63 2023/12/10 16:56:01 deraadt Exp $     */
+/*     $OpenBSD: locore.S,v 1.64 2023/12/12 07:37:21 deraadt Exp $     */
 /*     $NetBSD: locore.S,v 1.2 1996/10/16 19:33:09 ws Exp $    */
 
 /*
@@ -1180,10 +1180,8 @@ sigcodecall:
        sc                              /* sigreturn(scp) */
        .globl  sigcoderet
 sigcoderet:
-       li      %r0,SYS_exit
-       sc                              /* exit(errno) */
 esigcode:
-
+       /* FALLTHROUGH */
        .globl  sigfill
 sigfill:
        .long   0               # illegal
index f2106d1..1aeb6c2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: lcore_access.S,v 1.35 2023/12/10 16:56:01 deraadt Exp $ */
+/*     $OpenBSD: lcore_access.S,v 1.36 2023/12/12 07:37:21 deraadt Exp $ */
 
 /*
  * Copyright (c) 2001-2003 Opsycon AB  (www.opsycon.se / www.opsycon.com)
@@ -80,11 +80,9 @@ sigcodecall:
        syscall
        .globl  sigcoderet
 sigcoderet:
-       LI      v0, SYS_exit            # just in case sigreturn fails
-       syscall
        .globl  esigcode
 esigcode:
-
+       /* FALLTHROUGH */
        .globl  sigfill
 sigfill:
        teq     zero, zero, 0x52
index c74b185..59c5cb5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.S,v 1.47 2023/12/10 16:56:01 deraadt Exp $     */
+/*     $OpenBSD: locore.S,v 1.48 2023/12/12 07:37:21 deraadt Exp $     */
 
 /*
  * Copyright (c) 2020 Mark Kettenis <kettenis@openbsd.org>
@@ -42,11 +42,9 @@ sigcodecall:
        sc
        .globl sigcoderet
 sigcoderet:
-       li      %r0, SYS_exit
-       sc
        .globl esigcode
 esigcode:
-
+       /* FALLTHROUGH */
        .globl sigfill
 sigfill:
        .long   0
index f1f1f2e..f7c3f0f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.S,v 1.16 2023/12/10 16:56:02 deraadt Exp $     */
+/*     $OpenBSD: locore.S,v 1.17 2023/12/12 07:37:21 deraadt Exp $     */
 
 /*-
  * Copyright (c) 2015-2018 Ruslan Bukin <br@bsdpad.com>
@@ -236,15 +236,6 @@ initstack:
        .space  USPACE
 initstack_end:
 
-       .globl  sigfill
-sigfill:
-       unimp
-esigfill:
-       .globl  sigfillsiz
-sigfillsiz:
-       .data
-       .word   esigfill - sigfill
-
        .text
 ENTRY(sigcode)
        mv      a0, sp
@@ -255,13 +246,20 @@ sigcodecall:
        ecall
        .globl sigcoderet
 sigcoderet:
-       /* sigreturn failed, exit */
-       li      t0, SYS_exit
-       ecall
+       unimp
 END(sigcode)
        .globl esigcode
 esigcode:
 
+       .globl  sigfill
+sigfill:
+       unimp
+esigfill:
+       .globl  sigfillsiz
+sigfillsiz:
+       .data
+       .word   esigfill - sigfill
+
        .data
        .global esym
 esym:
index 2bd371f..944d1d2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore_subr.S,v 1.18 2023/12/10 16:56:02 deraadt Exp $        */
+/*     $OpenBSD: locore_subr.S,v 1.19 2023/12/12 07:37:21 deraadt Exp $        */
 /*     $NetBSD: locore_subr.S,v 1.28 2006/01/23 22:52:09 uwe Exp $     */
 
 /*
@@ -45,7 +45,7 @@
 
 #include "assym.h"
 
-#include <sys/syscall.h>       /* SYS_sigreturn, SYS_exit */
+#include <sys/syscall.h>       /* SYS_sigreturn */
 #include <sh/asm.h>
 #include <sh/locore.h>
 #include <sh/param.h>          /* UPAGES */
@@ -502,13 +502,11 @@ sigcodecall:
        trapa   #0x80                   /* and call sigreturn() */
        .globl  sigcoderet
 sigcoderet:
-       mov.l   .L_SYS_exit, r0
-       trapa   #0x80                   /* exit if sigreturn fails */
+       sleep           /* privileged -> illegal? */
        /* NOTREACHED */
 
        .align  2
 .L_SYS_sigreturn:      .long   SYS_sigreturn
-.L_SYS_exit:           .long   SYS_exit
 
 /* LINTSTUB: Var: char esigcode[1] */
 .globl esigcode
index 786bb4a..a92c987 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.s,v 1.203 2023/12/10 16:56:02 deraadt Exp $    */
+/*     $OpenBSD: locore.s,v 1.204 2023/12/12 07:37:21 deraadt Exp $    */
 /*     $NetBSD: locore.s,v 1.137 2001/08/13 06:10:10 jdolecek Exp $    */
 
 /*
@@ -5403,11 +5403,9 @@ sigcoderet:
 sigcodecall:
        t       ST_SYSCALL              ! sigreturn(scp)
        ! sigreturn does not return unless it fails
-       mov     SYS_exit, %g1           ! exit(errno)
-       t       ST_SYSCALL
        .globl  esigcode
 esigcode:
-
+       /* FALLTHROUGH */
        .globl  sigfill
 sigfill:
        unimp