Page MenuHomeFreeBSD

No OneTemporary

Size
738 B
Referenced Files
None
Subscribers
None
diff --git a/sys/arm64/arm64/trap.c b/sys/arm64/arm64/trap.c
index 9f792332a931..6292522ae67b 100644
--- a/sys/arm64/arm64/trap.c
+++ b/sys/arm64/arm64/trap.c
@@ -212,6 +212,17 @@ align_abort(struct thread *td, struct trapframe *frame, uint64_t esr,
uint64_t far, int lower)
{
if (!lower) {
+ /*
+ * Accessing unaligned memory may fault when using atomics.
+ * Make sure we don't panic if we're doing an unaligned
+ * access to userland memory, as can happen with _umtx_op()
+ */
+ if (td->td_intr_nesting_level == 0 &&
+ td->td_pcb->pcb_onfault != 0) {
+ frame->tf_elr = td->td_pcb->pcb_onfault;
+ return;
+ }
+
print_registers(frame);
print_gp_register("far", far);
printf(" esr: 0x%.16lx\n", esr);

File Metadata

Mime Type
text/x-diff
Expires
Thu, Aug 6, 10:39 AM (23 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29349046
Default Alt Text
(738 B)

Event Timeline