All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Andy Lutomirski <luto@amacapital.net>, Ingo Molnar <mingo@kernel.org>
Cc: Brian Gerst <brgerst@gmail.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Arjan van de Ven <arjan@linux.intel.com>,
	Andy Lutomirski <luto@kernel.org>,
	the arch/x86 maintainers <x86@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Oleg Nesterov <oleg@redhat.com>,
	Kees Cook <keescook@chromium.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Borislav Petkov <bp@alien8.de>
Subject: Re: [PATCH] x86/kconfig/32: Mark CONFIG_VM86 as BROKEN
Date: Fri, 10 Jul 2015 13:16:24 +0200	[thread overview]
Message-ID: <559FA988.9030205@redhat.com> (raw)
In-Reply-To: <CALCETrUs8SXR58F+DJVFEUH+vVnSZ-v6JuaLkJPjMJQLr1N+Bg@mail.gmail.com>



On 09/07/2015 20:33, Andy Lutomirski wrote:
> On Wed, Jul 8, 2015 at 10:59 PM, Ingo Molnar <mingo@kernel.org> wrote:
>>
>> * Ingo Molnar <mingo@kernel.org> wrote:
>>
>>>> Without something like that, we'll be in the awkward position of having some
>>>> of the selectors (DS, ES, FS, and GS) in both the normal pt_regs slot and in
>>>> the extended hardware frame during execution of normal vm86-unaware kernel
>>>> code.  If, on the other hand, we copied the selectors across in
>>>> enter_from_user_mode and prepare_return_from_usermode, then pt_regs would work
>>>> normally even for tasks that are running in v8086 mode.
>>>>
>>>> regs->flags & X86_EFLAGS_VM will be true regardless, so all of the asm that
>>>> decides to invoke those helpers should work fine.
>>>
>>> Btw., has anyone considered an entirely different approach: using KVM's
>>> instruction emulator to emulate vm86 16-bit code execution? Basically the vm86
>>> system call would be kept compatible, but fully emulated, the CPU never enters
>>> true 16-bit mode, just iterates pt_regs as if it had.
>>>
>>> This approach has four main advantages:
>>>
>>>  - we could remove the fragile vm86 code from the entry code
>>>
>>>  - it might even be faster for certain workloads than faulting in and out all
>>>    the time and using ancient, fragile hardware mode of the CPU. (For example it
>>>    could detect the VGA screen write patterns and accelerate them.)
>>>
>>>  - it could be made to work on 64-bit as well, FWIIW
>>>
>>>  - it would provide another angle of testing for the KVM emulator
>>
>> So there's a fifth advantage as well that I think needs to be stressed:
>>
>>    - it's an _obviously_ much more secure design, as we only iterate user-space
>>      pt_regs and never truly touch any security relevant CPU state. The whole
>>      nested pt_regs and different hw frame entry complications would go away
>>      entirely. All CPU semantics would not be just assumed implicitly, but would
>>      be very much present in the CPU emulator and would be reviewable.
>>
> 
> Hmm.
> 
> If we did this, I think I'd prefer a slightly more general approach.
> First teach KVM to support a mode in which it's purely an emulator
> (Paolo: how hard is this?  It would also make testing the emulator
> much easier).

This isn't hard, at least for Intel: make emulation_required() return
true always (and fix the fallout).  However, it's not necessary.  The
emulator is designed to be independent from the rest of KVM.  At some
point I think Avi was testing it in userspace (or planning to do so).
So you would just move it from arch/x86/kvm to arch/x86/emulate.

The obvious downside is that the emulator isn't really designed for
speed.  In KVM it's currently 1000-1500 times slower than the real
thing.  Even if you modified it to remove the KVM overhead (vm86 is just
running ring 3 code; no interrupts and no pagetables to walk), it
probably would take 300-500 cycles to execute one instruction.

But it's doable.

> The big downside of that, or of writing a more ad-hoc emulator, is
> understanding what the semantics of all the weird vm86plus stuff is
> supposed to be in the first place.

Do you mean VIF/VIP and the other vm86 mode extensions?  Or is vm86plus
something in Linux?

Paolo

> It's completely undocumented and
> it's not at all obvious what it's all supposed to do.  This sounds
> like a fairly large project.
> 
> I think I'd rather get all the distros to turn vm86 off and let it
> slowly die in a dark corner.  After all, dosemu and vbetool both
> already contain emulators that seem to work, and dosbox (which is, by
> all reports, better than dosemu) never used vm86 in the first place.
> 
> --Andy
> 

  reply	other threads:[~2015-07-10 11:16 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-08  1:25 [PATCH] x86/kconfig/32: Mark CONFIG_VM86 as BROKEN Andy Lutomirski
2015-07-08  2:33 ` Arjan van de Ven
2015-07-08 14:00   ` Thomas Gleixner
2015-07-08 14:04     ` Ingo Molnar
2015-07-09  9:03     ` Pavel Machek
2015-07-09 17:57       ` Andy Lutomirski
2015-07-09 18:03         ` Kees Cook
2015-07-09 18:30         ` Linus Torvalds
2015-07-08 16:59   ` Linus Torvalds
2015-07-08 17:30     ` Andy Lutomirski
2015-07-08 17:49       ` Andy Lutomirski
2015-07-08 17:55         ` Linus Torvalds
2015-07-08 18:47           ` Andy Lutomirski
2015-07-08 18:53             ` Kees Cook
2015-07-08 18:48           ` Kees Cook
2015-07-08 19:04             ` Andy Lutomirski
2015-07-08 18:54           ` Austin S Hemmelgarn
2015-07-08 19:05       ` Brian Gerst
2015-07-08 19:14         ` Andy Lutomirski
2015-07-08 19:39           ` Brian Gerst
2015-07-08 19:59             ` Andy Lutomirski
2015-07-09  5:52               ` Ingo Molnar
2015-07-09  5:59                 ` Ingo Molnar
2015-07-09 18:33                   ` Andy Lutomirski
2015-07-10 11:16                     ` Paolo Bonzini [this message]
2015-07-10 14:13                       ` Ingo Molnar
2015-07-10 14:24                         ` Paolo Bonzini
2015-07-10 14:39                       ` Andy Lutomirski
2015-07-10 14:12       ` Eric W. Biederman
2015-07-10 14:37         ` Andy Lutomirski
2015-07-10 16:35           ` Linus Torvalds
2015-07-10 16:44             ` Andy Lutomirski
2015-07-10 17:04               ` Linus Torvalds
2015-07-10 17:13                 ` Andy Lutomirski
2015-07-10 17:39                   ` Linus Torvalds
2015-07-10 17:58                     ` Andy Lutomirski
2015-07-10 18:00                     ` Al Viro
2015-07-11  9:18                     ` Ingo Molnar
2015-07-08 19:13     ` Ingo Molnar
2015-07-08  9:45 ` [tip:x86/asm] " tip-bot for Andy Lutomirski
2015-07-08 15:32 ` [PATCH] " Brian Gerst

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=559FA988.9030205@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=arjan@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=brgerst@gmail.com \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=luto@kernel.org \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=torvalds@linux-foundation.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.