Restore workaround for sysret fault on non-canonical address after LA57.

Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Konstantin Belousov
2020-08-24 22:12:45 +00:00
parent 2a5220e12e
commit f1e1c4ad73
+2 -1
View File
@@ -1189,7 +1189,8 @@ amd64_syscall(struct thread *td, int traced)
* not be safe. Instead, use the full return path which * not be safe. Instead, use the full return path which
* catches the problem safely. * catches the problem safely.
*/ */
if (__predict_false(td->td_frame->tf_rip >= VM_MAXUSER_ADDRESS)) if (__predict_false(td->td_frame->tf_rip >= (la57 ?
VM_MAXUSER_ADDRESS_LA57 : VM_MAXUSER_ADDRESS_LA48)))
set_pcb_flags(td->td_pcb, PCB_FULL_IRET); set_pcb_flags(td->td_pcb, PCB_FULL_IRET);
amd64_syscall_ret_flush_l1d_check_inline(td->td_errno); amd64_syscall_ret_flush_l1d_check_inline(td->td_errno);