Re: [PATCH 06/24] x86,kvm: Fix indirect calls in emulator

From: David Woodhouse
Date: Tue Jan 23 2018 - 15:48:43 EST


On Tue, 2018-01-23 at 21:28 +0100, Borislav Petkov wrote:
>
> >ÂÂÂÂÂÂÂflags = (flags & EFLAGS_MASK) | X86_EFLAGS_IF;
> > -ÂÂÂÂÂasm("push %[flags]; popf; call *%[fastop]"
> > -ÂÂÂÂÂÂÂÂ : "=a"(rc) : [fastop]"r"(fop), [flags]"r"(flags));
> > +ÂÂÂÂÂasm("push %[flags]; popf; " CALL_NOSPEC
> > +ÂÂÂÂÂÂÂÂ : "=a"(rc) : [thunk_target]"r"(fop), [flags]"r"(flags));
>
> Oh, "thunk_target" is magical.

You can use THUNK_TARGET(fop), which will be "rm" on 32-bit and avoids
register starvation in some cases (I don't think the hyperv calls
worked until I did that).

Attachment: smime.p7s
Description: S/MIME cryptographic signature