mirror of
https://github.com/opnsense/src.git
synced 2026-04-22 14:49:36 -04:00
- Don't allow tf_wstate to be set in set_regs.
- Clear FPRS_FEF in set_fpregs so the new registers will be reloaded.
This commit is contained in:
parent
8fe20fdafa
commit
404221fe55
1 changed files with 6 additions and 1 deletions
|
|
@ -92,6 +92,7 @@
|
|||
#include <machine/clock.h>
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/fp.h>
|
||||
#include <machine/fsr.h>
|
||||
#include <machine/intr_machdep.h>
|
||||
#include <machine/md_var.h>
|
||||
#include <machine/metadata.h>
|
||||
|
|
@ -653,10 +654,13 @@ fill_regs(struct thread *td, struct reg *regs)
|
|||
int
|
||||
set_regs(struct thread *td, struct reg *regs)
|
||||
{
|
||||
struct trapframe *tf;
|
||||
|
||||
if (!TSTATE_SECURE(regs->r_tstate))
|
||||
return (EINVAL);
|
||||
bcopy(regs, td->td_frame, sizeof(*regs));
|
||||
tf = td->td_frame;
|
||||
regs->r_wstate = tf->tf_wstate;
|
||||
bcopy(regs, tf, sizeof(*regs));
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
|
@ -696,6 +700,7 @@ set_fpregs(struct thread *td, struct fpreg *fpregs)
|
|||
|
||||
pcb = td->td_pcb;
|
||||
tf = td->td_frame;
|
||||
tf->tf_fprs &= ~FPRS_FEF;
|
||||
bcopy(fpregs->fr_regs, pcb->pcb_ufp, sizeof(pcb->pcb_ufp));
|
||||
tf->tf_fsr = fpregs->fr_fsr;
|
||||
tf->tf_gsr = fpregs->fr_gsr;
|
||||
|
|
|
|||
Loading…
Reference in a new issue