Restore workaround for sysret fault on non-canonical address after LA57.
Sponsored by: The FreeBSD Foundation
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user