Skip to content

Instantly share code, notes, and snippets.

@arkivm
Last active November 11, 2022 19:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arkivm/123eaed15848ac798de59375d4b93467 to your computer and use it in GitHub Desktop.
Save arkivm/123eaed15848ac798de59375d4b93467 to your computer and use it in GitHub Desktop.
Dump MSR registers to check if they are sane for enabling SEV-SNP
#!/usr/bin/env python
import subprocess
from collections import OrderedDict
def check_msr():
out = subprocess.run(["which", "rdmsr"], capture_output=True)
if out.stdout == b'':
subprocess.run(["sudo", "apt", "update"])
subprocess.run(["sudo", "apt", "install", "-y", "msr-tools"])
def insmod_msr():
out = subprocess.run(["lsmod"], capture_output=True)
if out.returncode == 0:
lsmod_out = out.stdout.decode('utf-8').splitlines()
modules_list = [m.split(' ')[0] for m in lsmod_out]
# print(modules_list)
if "msr" not in modules_list:
subprocess.run(["sudo", "modprobe", "msr"])
def dump_values():
amd_msrs = OrderedDict()
# Syscfg
amd_msrs["SYSCFG"] = "0xC0010010"
# IORR
amd_msrs["IORRBase0"] = "0xC0010016"
amd_msrs["IORRMask0"] = "0xC0010017"
amd_msrs["IORRBase1"] = "0xC0010018"
amd_msrs["IORRMask0"] = "0xC0010019"
amd_msrs["TOP_MEM"] = "0xC001001A"
amd_msrs["TOP_MEM2"] = "0xC001001D"
amd_msrs["VM_HSAVE_PA"] = "0xC0010117"
# Variable-Range MTRRs
amd_msrs["MTRRphysBase0"] = "0x200"
amd_msrs["MTRRphysMask0"] = "0x201"
amd_msrs["MTRRphysBase1"] = "0x202"
amd_msrs["MTRRphysMask1"] = "0x203"
amd_msrs["MTRRphysBase2"] = "0x204"
amd_msrs["MTRRphysMask2"] = "0x205"
amd_msrs["MTRRphysBase3"] = "0x206"
amd_msrs["MTRRphysMask3"] = "0x207"
amd_msrs["MTRRphysBase4"] = "0x208"
amd_msrs["MTRRphysMask4"] = "0x209"
amd_msrs["MTRRphysBase5"] = "0x20a"
amd_msrs["MTRRphysMask5"] = "0x20b"
amd_msrs["MTRRphysBase6"] = "0x20c"
amd_msrs["MTRRphysMask6"] = "0x20d"
amd_msrs["MTRRphysBase7"] = "0x20e"
amd_msrs["MTRRphysMask7"] = "0x20f"
# Fixed-Range MTRRs
amd_msrs["MTRRfix64K_00000"] = "0x250"
amd_msrs["MTRRfix16K_80000"] = "0x258"
amd_msrs["MTRRfix16K_A0000"] = "0x259"
amd_msrs["MTRRfix4K_C0000"] = "0x268"
amd_msrs["MTRRfix4K_C8000"] = "0x269"
amd_msrs["MTRRfix4K_D0000"] = "0x26A"
amd_msrs["MTRRfix4K_D8000"] = "0x26B"
amd_msrs["MTRRfix4K_E0000"] = "0x26C"
amd_msrs["MTRRfix4K_E8000"] = "0x26D"
amd_msrs["MTRRfix4K_F0000"] = "0x26E"
amd_msrs["MTRRfix4K_F8000"] = "0x26F"
# Default-Range MTRRs
amd_msrs["MTRRdefType"] = "0x2FF"
amd_msrs["MTRRcap"] = "0x00FE"
print("Name, address, set(values)")
for (k, v) in amd_msrs.items():
rdmsr_out_all = subprocess.run(["sudo", "rdmsr", "-a", v], capture_output=True)
rdmsr_out = set(rdmsr_out_all.stdout.decode('utf-8').splitlines())
print(f'{k}, {v}, {rdmsr_out}')
if __name__ == '__main__':
check_msr()
insmod_msr()
dump_values()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment