- 25 Oct, 2016 20 commits
-
-
Charles Jacobsen authored
-
Charlie Jacobsen authored
Updated code. Removed gdt/tss/idt for now. Added doc directory and some initial doc.
-
Charlie Jacobsen authored
This code is ugly, but it's working. Tested with basic module, and appears to be working properly. I will soon incorporate the patched modprobe into the kernel tree, and then this code will be usable by everyone. The ipc code is still unimplemented. The only hypercall handled is yield. Also note that other exit conditions (e.g. external interrupt) have not been fully tested. Overview: -- kernel code calls lcd_create_as_module with the module's name -- lcd_create_as_module loads the module using request_lcd_module (request_lcd_module calls the patched modprobe to load the module, and the patched modprobe calls back into the lcd driver via the ioctrl interface to load the module) -- lcd_create_as_module then finds the loaded module, spawns a kernel thread and passes off the module to it -- the kernel thread initializes the lcd and maps the module inside it, then suspends itself -- lcd_run_as_module wakes up the kernel thread and tells it to run -- lcd_delete_as_module stops the kernel thread and deletes the module from the host kernel File-by-file details: arch/x86/include/asm/lcd-domains-arch.h arch/x86/lcd-domains/lcd-domains-arch-tests.c arch/x86/lcd-domains/lcd-domains-arch.c -- lcd was not running in 64-bit mode, and my checks had one subtle bug -- fixed %cr3 load to properly load vmcs first -- fixed set program counter to use guest virtual rather than guest physical address include/linux/sched.h -- added struct lcd to task_struct include/linux/init_task.h -- lcd pointer set to null when task_struct is initialized include/linux/module.h kernel/module.c -- made init_module and delete_module system calls callable from kernel code -- available in module.h via do_sys_init_module and do_sys_delete_module -- simply moved the majority of the guts of the system calls into a non-system call, exported routine -- take an extra flag, for_lcd; when set, the init code skips over running (and deallocating) the module's init code, and the delete code skips over running the module exit -- system calls from user code set for_lcd = 0; this ensures existing code still works include/linux/kmod.h kernel/kmod.c kernel/sysctl.c -- changed __request_module to __do_request_module; takes one extra argument, for_lcd -- __request_module ==> __do_request_module with for_lcd = 0 -- request_lcd_module ==> __do_request_module with for_lcd = 1 -- call_modprobe conditionally uses lcd_modprobe_path, the path to a patched modprobe accessible via sysfs include/lcd-domains/lcd-domains.h -- added lcd status enum; see source code doc -- three routines for creating/running/destroying lcd's that use modules; see source code doc include/uapi/linux/lcd-domains.h -- added interface defns for patched modprobe to call into lcd driver for module init; lcd driver loads module (via slightly refactored module.c code) on behalf of modprobe virt/lcd-domains/lcd-domains.c -- implementation of routines for modules inside lcd's -- implementation of module init / delete for lcd's (uses patched module.c code) virt/lcd-domains/Kconfig virt/lcd-domains/Makefile virt/lcd-domains/lcd-module-load-test.c virt/lcd-domains/lcd-tests.c -- added test module for lcd module code -- test runs automatically when lcd module is inserted
-
Charles Jacobsen authored
In the process of debugging, major corrections and debug checks implemented (this is a big squash): -- coded up entry checks documented in Intel SDM V3 chp 26 (this should help later if settings are changed, make it less risky to experiment and give more confidence) -- fixed host tr base addr bug (the worst bug! caused system to hang and then crash, since the tss was erroneous...) -- fixed vmx_entry to properly set host rsp before entry -- setting host sysenter and idt info -- fixed cs ar bytes bug -- fixed gdt limit bug -- fixed tr type bug -- extra settings added to cr0 and cr4, but may not be needed ... (debug fix attempt) -- lstar mstar autoload, may not be needed ... (debug fix attempt)
-
Charles Jacobsen authored
-
Charlie Jacobsen authored
-
Charlie Jacobsen authored
-
Charles Jacobsen authored
-
Charles Jacobsen authored
-
Charlie Jacobsen authored
Updated tests.
-
Charles Jacobsen authored
Originally, destroying the ept structures also freed the mapped host physical memory. This is leading to bad double free errors. Instead, I will report a potential memory leak if an ept pte is present. Users of the ept should unmap any host phys memory before destroying the ept (will shift over ept unmap range from arch-indep to arch-dep next). Updated arch test04 to use vmx_free_ept, now that it doesn't try to free mapped host phys mem.
-
Charles Jacobsen authored
Some data structures in struct lcd_arch are mapped in the ept (so that the lcd has access to them). When the ept is freed, these data structures are freed. All tests passing now for lcd_arch_create.
-
Charles Jacobsen authored
Switch from macros to inline functions for type safety and sanity.
-
Charlie Jacobsen authored
-
Charles Jacobsen authored
EPT stress test04 now passes (aside from free ept).
-
Charles Jacobsen authored
-
Charlie Jacobsen authored
-
Charlie Jacobsen authored
-
Charles Jacobsen authored
-
Charlie Jacobsen authored
Successful build and insmod on emulab, but errors when trying to create lcd (perhaps errors mapping in ept). Regression tests should help and save debugging time in future.
-