[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Handle the possibility that FXRSTOR may fault by silently clearing
ChangeSet 1.1394, 2005/04/28 19:26:25+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx Handle the possibility that FXRSTOR may fault by silently clearing the data area that it is restoring from. This may occur if control tools reload a saved VM image without adequate checking, for example. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> i387.c | 28 ++++++++++++++++++++++++++-- 1 files changed, 26 insertions(+), 2 deletions(-) diff -Nru a/xen/arch/x86/i387.c b/xen/arch/x86/i387.c --- a/xen/arch/x86/i387.c 2005-04-28 15:04:43 -04:00 +++ b/xen/arch/x86/i387.c 2005-04-28 15:04:43 -04:00 @@ -46,10 +46,34 @@ void restore_fpu(struct exec_domain *tsk) { + /* + * FXRSTOR can fault if passed a corrupted data block. We handle this + * possibility, which may occur if the block was passed to us by control + * tools, by silently clearing the block. + */ if ( cpu_has_fxsr ) __asm__ __volatile__ ( - "fxrstor %0" - : : "m" (tsk->arch.guest_context.fpu_ctxt) ); + "1: fxrstor %0 \n" + ".section .fixup,\"ax\" \n" + "2: push %%"__OP"ax \n" + " push %%"__OP"cx \n" + " push %%"__OP"di \n" + " lea %0,%%"__OP"di \n" + " mov %1,%%ecx \n" + " xor %%eax,%%eax \n" + " rep ; stosl \n" + " pop %%"__OP"di \n" + " pop %%"__OP"cx \n" + " pop %%"__OP"ax \n" + " jmp 1b \n" + ".previous \n" + ".section __ex_table,\"a\"\n" + " "__FIXUP_ALIGN" \n" + " "__FIXUP_WORD" 1b,2b \n" + ".previous \n" + : + : "m" (tsk->arch.guest_context.fpu_ctxt), + "i" (sizeof(tsk->arch.guest_context.fpu_ctxt)/4) ); else __asm__ __volatile__ ( "frstor %0" _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |