git: 32b9c967e07c - main - amd64 FRED: handle INT 3, INT 4, and INT 0x92 same as for IDT

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Thu, 29 Oct 2026 05:50:00 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=32b9c967e07c7af2b6e421969d0e7ba1cc9b9425

commit 32b9c967e07c7af2b6e421969d0e7ba1cc9b9425
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-10-29 02:16:42 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-10-29 05:48:49 +0000

    amd64 FRED: handle INT 3, INT 4, and INT 0x92 same as for IDT
    
    Userspace INT {3, 4, 0x92} have DPL 3 gate in IDT, so enable them for
    FRED as well, matching the IDT action.
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
---
 sys/amd64/amd64/trap.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index 788fc6e859f5..9187d881c703 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -1676,6 +1676,22 @@ trap_fred_u(struct trapframe_fred *frame)
 			frame->tf_idt.tf_err = fred_inst_len(frame);
 			ia32_syscall(&frame->tf_idt);
 			break;
+		} else
+#endif
+		if (vec == IDT_BP || vec == IDT_OF) {
+			trap_fred_ev_to_trapno(frame, vec);
+			trap_fred_update_thread(td, frame);
+			trap_fred_handle_u_exc(td, frame, vec, &ksi,
+			    &do_trapsig);
+			break;
+		}
+#ifdef KDTRACE_HOOKS
+		else if (vec == IDT_DTRACE_RET) {
+			frame->tf_idt.tf_trapno = T_DTRACE_RET;
+			trap_fred_update_thread(td, frame);
+			(void)trap_user_dtrace(&frame->tf_idt,
+			    &dtrace_return_probe_ptr);
+			return;
 		}
 #endif
 		trap_fred_u_noperm(frame, &ksi);