# DF-5345 — VERDICT

**Status: not_reproduced** (the panic itself is not observable on stock
QEMU 7.2 — TCG returns 0 for unimplemented MSRs; QEMU-under-KVM strips
host-unsupported CPUID bits before the guest sees them). The code defect is
certain and the dangerous path was **proven reached and executed** on a
lying-CPUID configuration.

## What was proven

1. TCG boot with `-cpu qemu64,+svm,check=off` exposes
   `AMD Features2=0x7<LAHF,CMP,SVM>` to the guest
   (`boot-tcg-svm.log:37`).
2. `printcpuinfo()` (machdep.c:342) → identcpu.c:501
   `if (amd_feature2 & AMDID2_SVM) print_svm_info();` →
   `do_cpuid(0x8000000A)` (:1279, no `cpu_exthigh` guard) →
   **`rdmsr(MSR_AMD_VM_CR)` (:1282) executed in ring 0 on a CPU that does
   not implement it** — evidenced by `SVM: Features=0x0` (:39 of the log,
   printed after the MSR read) and the boot completing to `login:` with
   `Origin="TCGTCGTCGTCG"` (VMM detected).
3. QEMU TCG emulates unknown-MSR reads as 0 rather than #GP, so no fault
   occurred. On hypervisors that inject #GP for unsupported MSRs (KVM
   semantics) the same CPUID lie panics the kernel during early boot
   (`Fatal trap 13: general protection fault` in `print_svm_info`).

## Why this is a real defect

* The file already contains the mitigated precedent: :683-696 comments
  "Some hypervisors fail to implement MSR_IA32_ARCH_CAPABILITIES, catch any
  problems" and uses `rdmsr_safe`. print_svm_info (:1282) and
  print_vmx_info (:1345, :1350, and every `vmx_settable()` call at
  :1329-1332) use raw `rdmsr` for the same class of CPUID-gated MSR.
* print_svm_info additionally reads CPUID leaf 0x8000000A without checking
  `cpu_exthigh >= 0x8000000A`.
* print_vmx_info is not bootverbose-gated — every boot on a VMX-advertising
  CPU executes three+ raw VMX MSR reads.

Threat model: malicious/buggy hypervisor or firmware (the "malicious
firmware analog for VMs"). Impact ceiling: boot-time kernel panic (DoS of
the machine at startup — unauthenticated, no userland needed once CPUID
lies).

## Fix validation

not_testable — the faulting hypervisor needed to demonstrate the panic
before/after the fix cannot be built from stock QEMU 7.2 (TCG never
injects #GP on unknown MSR reads; KVM strips the feature bit). The fix is
the same pattern already proven in-file at :690 (`rdmsr_safe`).

## Fix status (batch validation)
Applied with the 36 sibling fix.diffs of this batch in findings/poc/_batch41/all_fixes.patch; single in-guest `make -j6 nativekernel KERNCONF=X86_64_GENERIC` completed RC=0 with zero errors under -Werror (full log: findings/poc/_batch41/fix_build8.log). Behavior A/B intentionally skipped for this Info-tier item.
