On Tue, Apr 04, 2017 at 09:07:08PM -0600, Theo de Raadt wrote:
> > cpu0: 256KB 64b/line 8-way L2 cache
> > rdmsr to register 0xc80 on vcpu 0
> >                                  fatal protection fault in supervisor
mode
> > trap type 4 code 0 rip ffffffff811c1d17 cs 8 rflags 202 cr2  0 cpl e rsp
> > ffffffff81a05940
> > panic: trap type 4, code=0, pc=ffffffff811c1d17
>
> That's the problem with virtual cpus in x86.  There are rather
> stringent requirements -- features which are offered up must be
> emulated, if the hardware vm features don't so in hardware.
>
> And noone tested it in that combination of bhyve + real hardware you
> have.
>
> Commit from January:
>
> revision 1.80
> date: 2017/01/13 17:15:27;  author: mikeb;  state: Exp;  lines: +20 -1;
commitid: xf3Mp5sczmZXop5L;
> Disable and lock Silicon Debug feature on modern Intel CPUs
>
> This implements one of the countermeasures against using Direct
> Connect Interface (DCI) to debug CPUs via USB3 mentioned in the
> "Tapping into the core" talk at the 33c3: identify and disable
> the Silicon Debug feature found in Haswell and newer CPUs.
>
> ok mlarkin, deraadt
>
>
>         /*
>          * Attempt to disable Silicon Debug and lock the configuration
>          * if it's enabled and unlocked.
>          */
>         if (!strcmp(cpu_vendor, "GenuineIntel") &&
>             (cpu_ecxfeature & CPUIDECX_SDBG)) {
>                 uint64_t msr;
>
>                 msr = rdmsr(IA32_DEBUG_INTERFACE);
>                 if ((msr & IA32_DEBUG_INTERFACE_ENABLE) &&
>                     (msr & IA32_DEBUG_INTERFACE_LOCK) == 0) {
>                         msr &= IA32_DEBUG_INTERFACE_MASK;
>                         msr |= IA32_DEBUG_INTERFACE_LOCK;
>                         wrmsr(IA32_DEBUG_INTERFACE, msr);
>                 } else if (msr & IA32_DEBUG_INTERFACE_ENABLE)
>                         printf("%s: cannot disable silicon debug\n",
>                             ci->ci_dev->dv_xname);
>         }
>
> Let me decipher the condition above: A cpu which claims it is
> GenuineIntel, and that it has the SDBG feature.. let's see..
>
> > cpu0: Intel(R) Xeon(R) CPU E5-1620 v3 @ 3.50GHz, 3491.87 MHz
> > cpu0:
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUS
H,MMX,FXSR,SSE,SSE2,SS,HTT,PBE,SSE3,PCLMUL,DTES64,DS-CPL,SSSE3,SDBG,FMA3,CX16
,xTPR,PCID,DCA,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,HV,NXE,PA
GE1GB,LONG,LAHF,ABM,ITSC,FSGSBASE,BMI1,AVX2,BMI2,ERMS,INVPCID,ARAT
> > cpu0: 256KB 64b/line 8-way L2 cache
>
> (see SDBG in the long line above?)
>
> In that case the emulation of that cpu must support the feature it
> claims to support, either by having the hardware do it, or by having
> the vm code emulate it.  It must emulate the MSR's associated with
> the feature.
>
> Or, not make the claim.
>
> bhyve appears to be passing down feature bits from the host cpu
> without sanitizing them.
>
> I wonder what other features they are passing down.... some of them
> are not really safe........
>

HardenedBSD fixed this a few months ago. Peter Grehan will pull in
HardenedBSD's fix soon.

For reference:
https://github.com/HardenedBSD/hardenedBSD/commit/cc91b57f4d1dabddfbf8b1e7655
bc19908f24f78

Thanks,

--
Shawn Webb
Cofounder and Security Engineer
HardenedBSD

GPG Key ID:          0x6A84658F52456EEE
GPG Key Fingerprint: 2ABA B6BD EF6A F486 BE89  3D9E 6A84 658F 5245 6EEE

[demime 1.01d removed an attachment of type application/pgp-signature which had 
a name of signature.asc]

Reply via email to