diff options
author | neel <neel@FreeBSD.org> | 2014-05-19 03:50:07 +0000 |
---|---|---|
committer | neel <neel@FreeBSD.org> | 2014-05-19 03:50:07 +0000 |
commit | b0752c36834e163965f74132ceccdcbebcdc8aba (patch) | |
tree | 6d7e5eac5fc4aae597aecc8918b3b080134ec6e3 /sys/amd64/include | |
parent | 3be9640f2c07a93d623ccf08630df8b05f676278 (diff) | |
download | FreeBSD-src-b0752c36834e163965f74132ceccdcbebcdc8aba.zip FreeBSD-src-b0752c36834e163965f74132ceccdcbebcdc8aba.tar.gz |
Add PG_U (user/supervisor) checks when translating a guest linear address
to a guest physical address.
PG_PS (page size) field is valid only in a PDE or a PDPTE so it is now
checked only in non-terminal paging entries.
Ignore the upper 32-bits of the CR3 for PAE paging.
Diffstat (limited to 'sys/amd64/include')
-rw-r--r-- | sys/amd64/include/vmm.h | 1 | ||||
-rw-r--r-- | sys/amd64/include/vmm_instruction_emul.h | 3 |
2 files changed, 3 insertions, 1 deletions
diff --git a/sys/amd64/include/vmm.h b/sys/amd64/include/vmm.h index 50d879b..94bdcf4 100644 --- a/sys/amd64/include/vmm.h +++ b/sys/amd64/include/vmm.h @@ -361,6 +361,7 @@ struct vm_exit { uint64_t cr3; enum vie_cpu_mode cpu_mode; enum vie_paging_mode paging_mode; + int cpl; struct vie vie; } inst_emul; /* diff --git a/sys/amd64/include/vmm_instruction_emul.h b/sys/amd64/include/vmm_instruction_emul.h index 0901aa2..0af9b4a 100644 --- a/sys/amd64/include/vmm_instruction_emul.h +++ b/sys/amd64/include/vmm_instruction_emul.h @@ -119,7 +119,8 @@ int vmm_emulate_instruction(void *vm, int cpuid, uint64_t gpa, struct vie *vie, */ int vmm_fetch_instruction(struct vm *vm, int cpuid, uint64_t rip, int inst_length, uint64_t cr3, - enum vie_paging_mode paging_mode, struct vie *vie); + enum vie_paging_mode paging_mode, int cpl, + struct vie *vie); void vie_init(struct vie *vie); |