Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package virt-manager for openSUSE:Factory checked in at 2022-05-12 22:57:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/virt-manager (Old) and /work/SRC/openSUSE:Factory/.virt-manager.new.1538 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "virt-manager" Thu May 12 22:57:51 2022 rev:231 rq:976118 version:4.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/virt-manager/virt-manager.changes 2022-03-05 14:44:32.639717981 +0100 +++ /work/SRC/openSUSE:Factory/.virt-manager.new.1538/virt-manager.changes 2022-05-12 22:58:13.868625277 +0200 @@ -1,0 +2,10 @@ +Wed Mar 30 09:06:33 MDT 2022 - carn...@suse.com + +- bsc#1196806 - [jsc#SLE-18834][virt-install] ERROR SEV launch + security requires a Q35 UEFI machine (epic: jsc#SLE-18732) + virtman-add-sev-memory-support.patch +- Add firmware features to description tooltip when mouse hovers + over the selected firmware file. + virtman-add-tooltip-to-firmware.patch + +------------------------------------------------------------------- New: ---- virtman-add-sev-memory-support.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ virt-manager.spec ++++++ --- /var/tmp/diff_new_pack.CoNVTD/_old 2022-05-12 22:58:14.744626454 +0200 +++ /var/tmp/diff_new_pack.CoNVTD/_new 2022-05-12 22:58:14.748626459 +0200 @@ -44,6 +44,7 @@ Patch103: virtman-load-stored-uris.patch Patch104: virtman-add-tooltip-to-firmware.patch Patch105: virtman-modify-gui-defaults.patch +Patch106: virtman-add-sev-memory-support.patch Patch120: virtinst-default-xen-to-qcow2-format.patch Patch121: virtinst-detect-oes-distros.patch Patch122: virtinst-vol-default-nocow.patch @@ -86,6 +87,7 @@ %define verrel %{version}-%{release} Requires: dbus-1-x11 Requires: dconf +Requires: gstreamer-plugins-good Requires: gtk3 Requires: python3-gobject # For console widget @@ -168,6 +170,7 @@ %patch103 -p1 %patch104 -p1 %patch105 -p1 +%patch106 -p1 %patch120 -p1 %patch121 -p1 %patch122 -p1 ++++++ virtinst-add-pvh-support.patch ++++++ --- /var/tmp/diff_new_pack.CoNVTD/_old 2022-05-12 22:58:14.836626577 +0200 +++ /var/tmp/diff_new_pack.CoNVTD/_new 2022-05-12 22:58:14.840626582 +0200 @@ -45,7 +45,7 @@ =================================================================== --- virt-manager-4.0.0.orig/virtManager/object/domain.py +++ virt-manager-4.0.0/virtManager/object/domain.py -@@ -1274,6 +1274,8 @@ class vmmDomain(vmmLibvirtObject): +@@ -1292,6 +1292,8 @@ class vmmDomain(vmmLibvirtObject): return self.get_xmlobj().os.is_xenpv() def is_hvm(self): return self.get_xmlobj().os.is_hvm() ++++++ virtinst-set-default-nic.patch ++++++ --- /var/tmp/diff_new_pack.CoNVTD/_old 2022-05-12 22:58:14.880626636 +0200 +++ /var/tmp/diff_new_pack.CoNVTD/_new 2022-05-12 22:58:14.880626636 +0200 @@ -1,11 +1,11 @@ References: bsc#1172356, bsc#1177620 Libvirt doesn't accept "Hypervisor default" as a model name -Index: virt-manager-3.3.0/virtinst/devices/interface.py +Index: virt-manager-4.0.0/virtinst/devices/interface.py =================================================================== ---- virt-manager-3.3.0.orig/virtinst/devices/interface.py -+++ virt-manager-3.3.0/virtinst/devices/interface.py -@@ -302,6 +302,9 @@ class DeviceInterface(Device): +--- virt-manager-4.0.0.orig/virtinst/devices/interface.py ++++ virt-manager-4.0.0/virtinst/devices/interface.py +@@ -305,6 +305,9 @@ class DeviceInterface(Device): return "e1000e" if not guest.os.is_x86(): return None ++++++ virtman-add-sev-memory-support.patch ++++++ References: bsc#1196806, jsc#SLE-18834 Index: virt-manager-4.0.0/ui/details.ui =================================================================== --- virt-manager-4.0.0.orig/ui/details.ui +++ virt-manager-4.0.0/ui/details.ui @@ -1925,7 +1925,20 @@ </packing> </child> <child> - <placeholder/> + <object class="GtkCheckButton" id="launch-security"> + <property name="label" translatable="yes">Enable launch security</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="halign">start</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> + <signal name="toggled" handler="on_mem_launch_security_toggled" swapped="no"/> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">4</property> + </packing> </child> </object> <packing> Index: virt-manager-4.0.0/virtManager/details/details.py =================================================================== --- virt-manager-4.0.0.orig/virtManager/details/details.py +++ virt-manager-4.0.0/virtManager/details/details.py @@ -50,6 +50,7 @@ from ..delete import vmmDeleteStorage EDIT_MEM, EDIT_MEM_SHARED, + EDIT_MEM_SEV, EDIT_AUTOSTART, EDIT_BOOTORDER, @@ -87,7 +88,7 @@ from ..delete import vmmDeleteStorage EDIT_FS, - EDIT_HOSTDEV_ROMBAR) = range(1, 38) + EDIT_HOSTDEV_ROMBAR) = range(1, 39) # Columns in hw list model @@ -440,6 +441,7 @@ class vmmDetails(vmmGObjectUI): "on_mem_maxmem_changed": _e(EDIT_MEM), "on_mem_memory_changed": self._curmem_changed_cb, "on_mem_shared_access_toggled": _e(EDIT_MEM_SHARED), + "on_mem_launch_security_toggled": _e(EDIT_MEM_SEV), "on_boot_list_changed": self._boot_list_changed_cb, "on_boot_moveup_clicked": self._boot_moveup_clicked_cb, @@ -1516,6 +1518,9 @@ class vmmDetails(vmmGObjectUI): if self._edited(EDIT_MEM_SHARED): kwargs["mem_shared"] = self.widget("shared-memory").get_active() + if self._edited(EDIT_MEM_SEV): + kwargs["sevmem"] = self.widget("launch-security").get_active() + return self._change_config( self.vm.define_memory, kwargs, hotplug_args=hotplug_args) @@ -2021,6 +2026,14 @@ class vmmDetails(vmmGObjectUI): curmem.set_value(int(round(vm_cur_mem))) maxmem.set_value(int(round(vm_max_mem))) + domcaps = self.vm.get_domain_capabilities() + show_sev = domcaps.supports_sev_launch_security() + self.widget("launch-security").set_sensitive(show_sev and self.is_customize_dialog) + if self.vm.get_launch_security_type(): + self.widget("launch-security").set_active(True) + else: + self.widget("launch-security").set_active(False) + shared_mem, shared_mem_err = self.vm.has_shared_mem() self.widget("shared-memory").set_active(shared_mem) self.widget("shared-memory").set_sensitive(not bool(shared_mem_err)) Index: virt-manager-4.0.0/virtManager/object/domain.py =================================================================== --- virt-manager-4.0.0.orig/virtManager/object/domain.py +++ virt-manager-4.0.0/virtManager/object/domain.py @@ -688,15 +688,33 @@ class vmmDomain(vmmLibvirtObject): guest.memoryBacking.access_mode = access_mode def define_memory(self, memory=_SENTINEL, maxmem=_SENTINEL, - mem_shared=_SENTINEL): + mem_shared=_SENTINEL, sevmem=_SENTINEL): guest = self._make_xmlobj_to_define() + def _set_rombar(guest, value): + # Ideally turning rombar off would be done automatically + # by either libvirt or qemu when SEV is detected. + for nic in guest.devices.interface: + nic.set_rom_bar(value) + if memory != _SENTINEL: guest.currentMemory = int(memory) if maxmem != _SENTINEL: guest.memory = int(maxmem) if mem_shared != _SENTINEL: self._edit_shared_mem(guest, mem_shared) + if sevmem != _SENTINEL: + if sevmem is True: + domcaps = self.get_domain_capabilities() + guest.launchSecurity.type = "sev" + guest.launchSecurity.set_defaults(guest, domcaps.supports_sev_es_launch_security()) + guest.memoryBacking.set_locked(True) + _set_rombar(guest, "off") + else: + guest.launchSecurity.type = None + guest.launchSecurity.policy = None + guest.memoryBacking.set_locked(False) + _set_rombar(guest, None) self._redefine_xmlobj(guest) @@ -1310,6 +1328,9 @@ class vmmDomain(vmmLibvirtObject): def get_description(self): return self.get_xmlobj().description + def get_launch_security_type(self): + return self.get_xmlobj().launchSecurity.type + def get_boot_order(self): legacy = not self.can_use_device_boot_order() return self.xmlobj.get_boot_order(legacy=legacy) Index: virt-manager-4.0.0/virtinst/domain/memorybacking.py =================================================================== --- virt-manager-4.0.0.orig/virtinst/domain/memorybacking.py +++ virt-manager-4.0.0/virtinst/domain/memorybacking.py @@ -27,6 +27,9 @@ class DomainMemoryBacking(XMLBuilder): XML_NAME = "memoryBacking" _XML_PROP_ORDER = ["hugepages", "nosharepages", "locked", "pages"] + def set_locked(self, value): + self.locked = value + hugepages = XMLProperty("./hugepages", is_bool=True) nosharepages = XMLProperty("./nosharepages", is_bool=True) locked = XMLProperty("./locked", is_bool=True) Index: virt-manager-4.0.0/virtinst/domcapabilities.py =================================================================== --- virt-manager-4.0.0.orig/virtinst/domcapabilities.py +++ virt-manager-4.0.0/virtinst/domcapabilities.py @@ -93,6 +93,10 @@ def _make_capsblock(xml_root_name): class _SEV(XMLBuilder): XML_NAME = "sev" supported = XMLProperty("./@supported", is_yesno=True) + cbitpos = XMLProperty("./cbitpos") + reducedPhysBits = XMLProperty("./reducedPhysBits") + maxGuests = XMLProperty("./maxGuests") + maxESGuests = XMLProperty("./maxESGuests") ############################# @@ -398,6 +402,9 @@ class DomainCapabilities(XMLBuilder): """ return bool(self.features.sev.supported) + def supports_sev_es_launch_security(self): + return bool(self.features.sev.supported and self.features.sev.maxESGuests) + def supports_video_bochs(self): """ Returns False if either libvirt or qemu do not have support to bochs Index: virt-manager-4.0.0/virtinst/domain/launch_security.py =================================================================== --- virt-manager-4.0.0.orig/virtinst/domain/launch_security.py +++ virt-manager-4.0.0/virtinst/domain/launch_security.py @@ -18,9 +18,13 @@ class DomainLaunchSecurity(XMLBuilder): dhCert = XMLProperty("./dhCert") kernelHashes = XMLProperty("./@kernelHashes", is_yesno=True) - def _set_defaults_sev(self, guest): - if not guest.os.is_q35() or not guest.is_uefi(): - raise RuntimeError(_("SEV launch security requires a Q35 UEFI machine")) + def _set_defaults_sev(self, guest, sev_es): + if not guest.os.is_q35(): + raise RuntimeError(_("SEV launch security requires a Q35 machine")) + # Libvirt will select the appropriate firmware file if not specified + # as long as we enable efi. + if not guest.is_uefi(): + guest.os.firmware = 'efi' # 'policy' is a mandatory 4-byte argument for the SEV firmware, # if missing, let's use 0x03 which, according to the table at @@ -28,8 +32,11 @@ class DomainLaunchSecurity(XMLBuilder): # (bit 0) - disables the debugging mode # (bit 1) - disables encryption key sharing across multiple guests if self.policy is None: - self.policy = "0x03" + if sev_es: + self.policy = "0x07" + else: + self.policy = "0x03" - def set_defaults(self, guest): + def set_defaults(self, guest, sev_es=False): if self.type == "sev": - return self._set_defaults_sev(guest) + return self._set_defaults_sev(guest, sev_es) Index: virt-manager-4.0.0/virtinst/devices/interface.py =================================================================== --- virt-manager-4.0.0.orig/virtinst/devices/interface.py +++ virt-manager-4.0.0/virtinst/devices/interface.py @@ -287,6 +287,9 @@ class DeviceInterface(Device): self.type = nettype self.source = source + def set_rom_bar(self, value): + self.rom_bar = value + ################## # Default config # Index: virt-manager-4.0.0/virtManager/addhardware.py =================================================================== --- virt-manager-4.0.0.orig/virtManager/addhardware.py +++ virt-manager-4.0.0/virtManager/addhardware.py @@ -1438,6 +1438,9 @@ class vmmAddHardware(vmmGObjectUI): mac = self.widget("create-mac-address").get_text() dev = self._netlist.build_device(mac, model) + if self.vm.get_launch_security_type() == "sev": + dev.set_rom_bar("off") + return dev def _build_input(self): ++++++ virtman-add-tooltip-to-firmware.patch ++++++ --- /var/tmp/diff_new_pack.CoNVTD/_old 2022-05-12 22:58:14.920626689 +0200 +++ /var/tmp/diff_new_pack.CoNVTD/_new 2022-05-12 22:58:14.924626695 +0200 @@ -2,10 +2,10 @@ When a particular firmware is selected, read the json file for a description. Add a tooltip of the json description when the mouse move overs the selected firmware. -Index: virt-manager-3.3.0/virtManager/details/details.py +Index: virt-manager-4.0.0/virtManager/details/details.py =================================================================== ---- virt-manager-3.3.0.orig/virtManager/details/details.py -+++ virt-manager-3.3.0/virtManager/details/details.py +--- virt-manager-4.0.0.orig/virtManager/details/details.py ++++ virt-manager-4.0.0/virtManager/details/details.py @@ -5,6 +5,9 @@ # See the COPYING file in the top-level directory. @@ -25,7 +25,7 @@ "on_overview_chipset_changed": _e(EDIT_MACHTYPE), "on_details_inspection_refresh_clicked": self._inspection_refresh_clicked_cb, -@@ -1117,6 +1120,49 @@ class vmmDetails(vmmGObjectUI): +@@ -1117,6 +1120,52 @@ class vmmDetails(vmmGObjectUI): self.storage_browser.set_browse_reason(reason) self.storage_browser.show(self.topwin) @@ -54,6 +54,9 @@ + json_exec = str(json_obj['mapping']['executable']['filename']) + if json_exec == firmware_file: + json_description = str(json_obj['description']) ++ json_features = str(json_obj['features']) ++ if len(json_features) > 0: ++ json_description = json_description + ". Firmware features: " + json_features + wrapper = textwrap.TextWrapper(width=60) + json_list = wrapper.wrap(text=json_description) + json_description = "\n".join(json_list) ++++++ virtman-fix-restore-vm-menu-selection.patch ++++++ --- /var/tmp/diff_new_pack.CoNVTD/_old 2022-05-12 22:58:14.948626727 +0200 +++ /var/tmp/diff_new_pack.CoNVTD/_new 2022-05-12 22:58:14.952626733 +0200 @@ -3,11 +3,11 @@ Libvirt returns libvirt.VIR_DOMAIN_PMSUSPENDED after a vm has been 'saved'. -Index: virt-manager-3.3.0/virtManager/object/domain.py +Index: virt-manager-4.0.0/virtManager/object/domain.py =================================================================== ---- virt-manager-3.3.0.orig/virtManager/object/domain.py -+++ virt-manager-3.3.0/virtManager/object/domain.py -@@ -1581,7 +1581,8 @@ class vmmDomain(vmmLibvirtObject): +--- virt-manager-4.0.0.orig/virtManager/object/domain.py ++++ virt-manager-4.0.0/virtManager/object/domain.py +@@ -1602,7 +1602,8 @@ class vmmDomain(vmmLibvirtObject): return (self.is_stoppable() or self.status() in [libvirt.VIR_DOMAIN_CRASHED]) def is_runable(self):