hw/smbios: allow clearing the VM bit in SMBIOS table 0
This is useful to be able to freeze a specific version of SeaBIOS to prevent guest visible changes between BIOS updates. This is currently not possible since the extension byte 2 provided by SeaBIOS does not set the VM bit, whereas QEMU sets it unconditionally. Allowing to clear it also seems useful if we want to hide the fact that the guest system is running inside a virtual machine. Signed-off-by: Daniil Tatianin <d-tatianin@yandex-team.ru> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Message-ID: <20250724195409.43499-1-d-tatianin@yandex-team.ru> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
4cc103081b
commit
d285591d29
3 changed files with 12 additions and 3 deletions
|
|
@ -179,6 +179,10 @@ static const QemuOptDesc qemu_smbios_type0_opts[] = {
|
|||
.name = "uefi",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "uefi support",
|
||||
},{
|
||||
.name = "vm",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "virtual machine",
|
||||
},
|
||||
{ /* end of list */ }
|
||||
};
|
||||
|
|
@ -574,10 +578,14 @@ static void smbios_build_type_0_table(void)
|
|||
|
||||
t->bios_characteristics = cpu_to_le64(0x08); /* Not supported */
|
||||
t->bios_characteristics_extension_bytes[0] = 0;
|
||||
t->bios_characteristics_extension_bytes[1] = 0x14; /* TCD/SVVP | VM */
|
||||
|
||||
t->bios_characteristics_extension_bytes[1] = 0x04; /* TCD/SVVP */
|
||||
if (smbios_type0.uefi) {
|
||||
t->bios_characteristics_extension_bytes[1] |= 0x08; /* |= UEFI */
|
||||
}
|
||||
if (smbios_type0.vm) {
|
||||
t->bios_characteristics_extension_bytes[1] |= 0x10; /* |= VM */
|
||||
}
|
||||
|
||||
if (smbios_type0.have_major_minor) {
|
||||
t->system_bios_major_release = smbios_type0.major;
|
||||
|
|
@ -1405,6 +1413,7 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
|||
save_opt(&smbios_type0.version, opts, "version");
|
||||
save_opt(&smbios_type0.date, opts, "date");
|
||||
smbios_type0.uefi = qemu_opt_get_bool(opts, "uefi", false);
|
||||
smbios_type0.vm = qemu_opt_get_bool(opts, "vm", true);
|
||||
|
||||
val = qemu_opt_get(opts, "release");
|
||||
if (val) {
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ extern GArray *usr_blobs_sizes;
|
|||
|
||||
typedef struct {
|
||||
const char *vendor, *version, *date;
|
||||
bool have_major_minor, uefi;
|
||||
bool have_major_minor, uefi, vm;
|
||||
uint8_t major, minor;
|
||||
} smbios_type0_t;
|
||||
extern smbios_type0_t smbios_type0;
|
||||
|
|
|
|||
|
|
@ -2700,7 +2700,7 @@ DEF("smbios", HAS_ARG, QEMU_OPTION_smbios,
|
|||
"-smbios file=binary\n"
|
||||
" load SMBIOS entry from binary file\n"
|
||||
"-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]\n"
|
||||
" [,uefi=on|off]\n"
|
||||
" [,uefi=on|off][,vm=on|off]\n"
|
||||
" specify SMBIOS type 0 fields\n"
|
||||
"-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]\n"
|
||||
" [,uuid=uuid][,sku=str][,family=str]\n"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue