handle_vm86_fault
Recently some changes were made to arch/i386/kernel/vm86.c in order to prevent some Oopses. Currently handle_vm86_fault returns VM86_UNKNOWN in those cases. But that is a little broken, rather than returning this value, it should send a SIGSEGV to usermode.
That is however not trivial, there is a problem with the si_addr field in the siginfo_t struct. The do_page_fault function in arch/i386/mm/fault.c will fill this field in such a struct with the local variable address. But that only happens if the trap comes from usermode, in this case the trap comes from kernelmode. That means that do_page_fault just finds the fixup address and returns loosing the value of the local variable address.
How can I pass that variable back from do_page_fault to handle_vm86_fault? There might also be a problem with the si_code field, I'm not sure exactly from where I should get that value. Perhaps it will turn out to be some known constant.
Would it be safe to fill the address in tsk->thread.cr2 like the usermode case?
Signature · 2 lines
Kasper Dupont -- der bruger for meget tid på usenet. For sending spam use mailto:[email protected]