Re: [v6 PATCH 00/21] x86: Enable User-Mode Instruction Prevention
From: Andy Lutomirski
Date: Sun Apr 02 2017 - 11:53:20 EST
On Sat, Apr 1, 2017 at 10:49 AM, H. Peter Anvin <hpa@xxxxxxxxx> wrote:
> <x86@xxxxxxxxxx>,linux-msdos@xxxxxxxxxxxxxxx,wine-devel@xxxxxxxxxx
> From: hpa@xxxxxxxxx
> Message-ID: <3FD12652-AA83-4D73-9914-BBA089E58FFA@xxxxxxxxx>
>
> On April 1, 2017 6:08:43 AM PDT, Stas Sergeev <stsp@xxxxxxx> wrote:
>>30.03.2017 08:14, Ricardo Neri ÐÐÑÐÑ:
>>>>>>>> You know the wine's
>>>>>>>> requirements now - they are very small. And
>>>>>>>> dosemu doesn't need anything at all but smsw.
>>>>>>>> And even smsw is very rare.
>>>>>>> But emulation is still needed for SMSW, right?
>>>>>> Likely so.
>>>>>> If you want, I can enable the logging of this command
>>>>>> and see if it is used by some of the DOS programs I have.
>>>>> It would be great if you could do that, if you don't mind.
>>>> OK, scheduled to the week-end.
>>>> I'll let you know.
>>> Thanks!
>>OK, done the testing.
>>It appears smsw is used in v86 by windows-3.1 and dos4gw
>>at the very least, and these are the "major" apps. So doing
>>without a fixup in v86 will not go unnoticed. Unfortunately
>>this also means that KVM-vm86 should be properly tested.
>>I have also found a weird program that does SGDT under
>>v86. This causes "ERROR: SGDT not implemented" under
>>dosemu, but the prog still works fine as it obviously does
>>not care about the results. This app can easily be broken
>>of course, if that makes any sense (likely not).
>
> Using SMSW to detect v86 mode is relatively common. pushf hides the VM flag, but SMSW is available, providing the v86 virtualization hole.
I think we should emulate all the instructions (as documented in the
SDM, so things that #UD in v86 mode still do so) rather than trying to
be clever. If we're clever and we get it wrong, we might discover
that something started depending on our cleverness in the mean time.
--Andy