create a new code ILL_BTCFI associated with SIGILL for trap faults which
authorderaadt <deraadt@openbsd.org>
Wed, 21 Feb 2024 15:53:07 +0000 (15:53 +0000)
committerderaadt <deraadt@openbsd.org>
Wed, 21 Feb 2024 15:53:07 +0000 (15:53 +0000)
indicate missing indirect branch target instructions (on the two
architectures which currently have this).  This becomes nicely visible in
kdump:
  6526 cat      PSIG  SIGILL SIG_DFL code=ILL_BTCFI addr=0x438fad6a990 trapno=21
ok kettenis sthen miod rsadowski

sys/arch/amd64/amd64/trap.c
sys/arch/arm64/arm64/trap.c
sys/sys/siginfo.h

index 4df1748..a40de92 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: trap.c,v 1.104 2024/01/31 06:06:28 guenther Exp $     */
+/*     $OpenBSD: trap.c,v 1.105 2024/02/21 15:53:07 deraadt Exp $      */
 /*     $NetBSD: trap.c,v 1.2 2003/05/04 23:51:56 fvdl Exp $    */
 
 /*-
@@ -424,7 +424,7 @@ usertrap(struct trapframe *frame)
                break;
        case T_CP:
                sig = SIGILL;
-               code = (frame->tf_err & 0x7fff) < 4 ? ILL_ILLOPC
+               code = (frame->tf_err & 0x7fff) < 4 ? ILL_BTCFI
                    : ILL_BADSTK;
                break;
 
index bbe6b04..c420b74 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.47 2023/12/26 09:19:15 kettenis Exp $ */
+/* $OpenBSD: trap.c,v 1.48 2024/02/21 15:53:07 deraadt Exp $ */
 /*-
  * Copyright (c) 2014 Andrew Turner
  * All rights reserved.
@@ -286,7 +286,7 @@ do_el0_sync(struct trapframe *frame)
        case EXCP_BRANCH_TGT:
                curcpu()->ci_flush_bp();
                sv.sival_ptr = (void *)frame->tf_elr;
-               trapsignal(p, SIGILL, esr, ILL_ILLOPC, sv);
+               trapsignal(p, SIGILL, esr, ILL_BTCFI, sv);
                break;
        case EXCP_FPAC:
                curcpu()->ci_flush_bp();
index c534ab1..d071f4f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: siginfo.h,v 1.13 2022/10/25 16:08:26 kettenis Exp $   */
+/*     $OpenBSD: siginfo.h,v 1.14 2024/02/21 15:53:07 deraadt Exp $    */
 
 /*
  * Copyright (c) 1997 Theo de Raadt
@@ -61,7 +61,8 @@ union sigval {
 #define ILL_PRVREG     6       /* privileged register */
 #define ILL_COPROC     7       /* co-processor */
 #define ILL_BADSTK     8       /* bad stack */
-#define NSIGILL                8
+#define ILL_BTCFI      9       /* IBT missing on indirect call */
+#define NSIGILL                9
 
 #define EMT_TAGOVF     1       /* tag overflow */
 #define NSIGEMT                1