git: 8bfb456eafd3 - main - arm64: Raise a SIGILL if we fail reading an insn
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 12 May 2025 12:50:18 UTC
The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=8bfb456eafd34e2de89d2fb77af7a1d34474ca0d commit 8bfb456eafd34e2de89d2fb77af7a1d34474ca0d Author: Andrew Turner <andrew@FreeBSD.org> AuthorDate: 2025-05-12 11:04:05 +0000 Commit: Andrew Turner <andrew@FreeBSD.org> CommitDate: 2025-05-12 11:04:05 +0000 arm64: Raise a SIGILL if we fail reading an insn When reading an instruction we may fail if another thread is unmapping a page while the current thread is executing from it. In this case raise a SIGILL rather than panicing the kernel. Reviewed by: harry.moulton_arm.com Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D50203 --- sys/arm64/arm64/undefined.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/arm64/arm64/undefined.c b/sys/arm64/arm64/undefined.c index c307281ea523..cdd2a083ec17 100644 --- a/sys/arm64/arm64/undefined.c +++ b/sys/arm64/arm64/undefined.c @@ -322,8 +322,9 @@ undef_insn(u_int el, struct trapframe *frame) if (el == 0) { ret = fueword32((uint32_t *)frame->tf_elr, &insn); + /* Raise a SIGILL if we are unable to read the instruction */ if (ret != 0) - panic("Unable to read userspace faulting instruction"); + return (0); } else { insn = *(uint32_t *)frame->tf_elr; }