git: 32b9c967e07c - main - amd64 FRED: handle INT 3, INT 4, and INT 0x92 same as for IDT
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
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);