diff options
Diffstat (limited to 'dom0')
| -rw-r--r-- | dom0/patches/libvirt-qemu-caps.patch | 73 | ||||
| -rw-r--r-- | dom0/system-laptop.scm | 29 | ||||
| -rw-r--r-- | dom0/system.scm | 29 |
3 files changed, 109 insertions, 22 deletions
diff --git a/dom0/patches/libvirt-qemu-caps.patch b/dom0/patches/libvirt-qemu-caps.patch new file mode 100644 index 0000000..dd110a6 --- /dev/null +++ b/dom0/patches/libvirt-qemu-caps.patch @@ -0,0 +1,73 @@ +From e7239c619fcaf35b8b605ce07c5d5b15351b3a62 Mon Sep 17 00:00:00 2001 +From: anonymix007 <48598263+anonymix007@users.noreply.github.com> +Date: Wed, 4 Jun 2025 12:05:23 +0300 +Subject: [PATCH] qemu: capabilities: Check if cpuModels is not NULL before + trying to dereference it + +accel->cpuModels field might be NULL if QEMU does not return CPU models. +The following backtrace is observed in such cases: +0 virQEMUCapsProbeQMPCPUDefinitions (qemuCaps=qemuCaps@entry=0x7f1890003ae0, accel=accel@entry=0x7f1890003c10, mon=mon@entry=0x7f1890005270) + at ../src/qemu/qemu_capabilities.c:3091 +1 0x00007f18b42fa7b1 in virQEMUCapsInitQMPMonitor (qemuCaps=qemuCaps@entry=0x7f1890003ae0, mon=0x7f1890005270) at ../src/qemu/qemu_capabilities.c:5746 +2 0x00007f18b42fafaf in virQEMUCapsInitQMPSingle (qemuCaps=qemuCaps@entry=0x7f1890003ae0, libDir=libDir@entry=0x7f186c1e70f0 "/var/lib/libvirt/qemu", + runUid=runUid@entry=955, runGid=runGid@entry=955, onlyTCG=onlyTCG@entry=false) at ../src/qemu/qemu_capabilities.c:5832 +3 0x00007f18b42fb1a5 in virQEMUCapsInitQMP (qemuCaps=0x7f1890003ae0, libDir=0x7f186c1e70f0 "/var/lib/libvirt/qemu", runUid=955, runGid=955) + at ../src/qemu/qemu_capabilities.c:5848 +4 virQEMUCapsNewForBinaryInternal (hostArch=VIR_ARCH_X86_64, binary=binary@entry=0x7f1868002fc0 "/usr/bin/qemu-system-alpha", + libDir=0x7f186c1e70f0 "/var/lib/libvirt/qemu", runUid=955, runGid=955, + hostCPUSignature=0x7f186c1e9f20 "AuthenticAMD, AMD Ryzen 9 7950X 16-Core Processor, family: 25, model: 97, stepping: 2", microcodeVersion=174068233, + kernelVersion=0x7f186c194200 "6.14.9-arch1-1 #1 SMP PREEMPT_DYNAMIC Thu, 29 May 2025 21:42:15 +0000", cpuData=0x7f186c1ea490) + at ../src/qemu/qemu_capabilities.c:5907 +5 0x00007f18b42fb4c9 in virQEMUCapsNewData (binary=0x7f1868002fc0 "/usr/bin/qemu-system-alpha", privData=0x7f186c194280) + at ../src/qemu/qemu_capabilities.c:5942 +6 0x00007f18bd42d302 in virFileCacheNewData (cache=0x7f186c193730, name=0x7f1868002fc0 "/usr/bin/qemu-system-alpha") at ../src/util/virfilecache.c:206 +7 virFileCacheValidate (cache=cache@entry=0x7f186c193730, name=name@entry=0x7f1868002fc0 "/usr/bin/qemu-system-alpha", data=data@entry=0x7f18b67c37c0) + at ../src/util/virfilecache.c:269 +8 0x00007f18bd42d5b8 in virFileCacheLookup (cache=cache@entry=0x7f186c193730, name=name@entry=0x7f1868002fc0 "/usr/bin/qemu-system-alpha") + at ../src/util/virfilecache.c:301 +9 0x00007f18b42fb679 in virQEMUCapsCacheLookup (cache=cache@entry=0x7f186c193730, binary=binary@entry=0x7f1868002fc0 "/usr/bin/qemu-system-alpha") + at ../src/qemu/qemu_capabilities.c:6036 +10 0x00007f18b42fb785 in virQEMUCapsInitGuest (caps=<optimized out>, cache=<optimized out>, hostarch=VIR_ARCH_X86_64, guestarch=VIR_ARCH_ALPHA) + at ../src/qemu/qemu_capabilities.c:1037 +11 virQEMUCapsInit (cache=0x7f186c193730) at ../src/qemu/qemu_capabilities.c:1229 +12 0x00007f18b431d311 in virQEMUDriverCreateCapabilities (driver=driver@entry=0x7f186c01f410) at ../src/qemu/qemu_conf.c:1553 +13 0x00007f18b431d663 in virQEMUDriverGetCapabilities (driver=0x7f186c01f410, refresh=<optimized out>) at ../src/qemu/qemu_conf.c:1623 +14 0x00007f18b435e3e4 in qemuConnectGetVersion (conn=<optimized out>, version=0x7f18b67c39b0) at ../src/qemu/qemu_driver.c:1492 +15 0x00007f18bd69c5e8 in virConnectGetVersion (conn=0x55bc5f4cda20, hvVer=hvVer@entry=0x7f18b67c39b0) at ../src/libvirt-host.c:201 +16 0x000055bc34ef3627 in remoteDispatchConnectGetVersion (server=0x55bc5f4b93f0, msg=0x55bc5f4cdf60, client=0x55bc5f4c66d0, rerr=0x7f18b67c3a80, + ret=0x55bc5f4b8670) at src/remote/remote_daemon_dispatch_stubs.h:1265 +17 remoteDispatchConnectGetVersionHelper (server=0x55bc5f4b93f0, client=0x55bc5f4c66d0, msg=0x55bc5f4cdf60, rerr=0x7f18b67c3a80, args=0x0, ret=0x55bc5f4b8670) + at src/remote/remote_daemon_dispatch_stubs.h:1247 +18 0x00007f18bd5506da in virNetServerProgramDispatchCall (prog=0x55bc5f4cae90, server=0x55bc5f4b93f0, client=0x55bc5f4c66d0, msg=0x55bc5f4cdf60) + at ../src/rpc/virnetserverprogram.c:423 +19 virNetServerProgramDispatch (prog=0x55bc5f4cae90, server=server@entry=0x55bc5f4b93f0, client=0x55bc5f4c66d0, msg=0x55bc5f4cdf60) + at ../src/rpc/virnetserverprogram.c:299 +20 0x00007f18bd556c32 in virNetServerProcessMsg (srv=srv@entry=0x55bc5f4b93f0, client=<optimized out>, prog=<optimized out>, msg=<optimized out>) + at ../src/rpc/virnetserver.c:135 +21 0x00007f18bd556f77 in virNetServerHandleJob (jobOpaque=0x55bc5f4d2bb0, opaque=0x55bc5f4b93f0) at ../src/rpc/virnetserver.c:155 +22 0x00007f18bd47dd19 in virThreadPoolWorker (opaque=<optimized out>) at ../src/util/virthreadpool.c:164 +23 0x00007f18bd47d253 in virThreadHelper (data=0x55bc5f4b7810) at ../src/util/virthread.c:256 +24 0x00007f18bce117eb in start_thread (arg=<optimized out>) at pthread_create.c:448 +25 0x00007f18bce9518c in __GI___clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78 + +Signed-off-by: anonymix007 <anonymix007@users.noreply.github.com> +--- + src/qemu/qemu_capabilities.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index 3cbdf3de82..8ba528fc07 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -3087,6 +3087,9 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCaps *qemuCaps, + if (virQEMUCapsFetchCPUDefinitions(mon, qemuCaps->arch, &accel->cpuModels) < 0) + return -1; + ++ if (!accel->cpuModels) ++ return 0; ++ + defs = accel->cpuModels; + for (i = 0; i < defs->ncpus; i++) { + if (STREQ_NULLABLE(defs->cpus[i].name, "max")) { +-- +2.51.0 diff --git a/dom0/system-laptop.scm b/dom0/system-laptop.scm index 052ff5f..d7f9ba5 100644 --- a/dom0/system-laptop.scm +++ b/dom0/system-laptop.scm @@ -2,6 +2,7 @@ (define-module (dom0 system) #:use-module (gnu) #:use-module (gnu services guix) + #:use-module (guix transformations) #:use-module (nongnu packages linux) #:use-module (nongnu system linux-initrd) #:use-module (nongnu packages nvidia) @@ -10,9 +11,13 @@ (use-service-modules linux guix desktop pm audio virtualization networking dbus xorg avahi spice) -(use-package-modules linux audio libusb wm fonts +(use-package-modules linux audio libusb wm fonts virtualization freedesktop vim cryptsetup version-control) +(define patch-libvirt + (options->transformation + '((with-patch . "libvirt=patches/libvirt-qemu-caps.patch")))) + (operating-system (locale "en_GB.utf8") (timezone "Europe/London") @@ -149,16 +154,18 @@ ;; Time (service ntp-service-type) - ;; Virtualization - (service libvirt-service-type) - (service virtlog-service-type) - - ;; udev - (udev-rules-service 'pipewire-add-udev-rules pipewire) - - ;; dom0 home - (service guix-home-service-type - `(("dom0" ,dom0-home-environment)))))) + ;; Virtualization + (service libvirt-service-type + (libvirt-configuration + (libvirt (patch-libvirt libvirt)))) + (service virtlog-service-type) + + ;; udev + (udev-rules-service 'pipewire-add-udev-rules pipewire) + + ;; dom0 home + (service guix-home-service-type + `(("dom0" ,dom0-home-environment)))))) ;; Packages (system-wide) (packages (cons* vim diff --git a/dom0/system.scm b/dom0/system.scm index 5278f4d..4b5b03c 100644 --- a/dom0/system.scm +++ b/dom0/system.scm @@ -2,6 +2,7 @@ (define-module (dom0 system) #:use-module (gnu) #:use-module (gnu services guix) + #:use-module (guix transformations) #:use-module (nongnu packages linux) #:use-module (nongnu system linux-initrd) #:use-module (nongnu packages nvidia) @@ -10,9 +11,13 @@ (use-service-modules linux guix desktop pm audio virtualization networking dbus xorg avahi spice) -(use-package-modules linux audio libusb wm fonts +(use-package-modules linux audio libusb wm fonts virtualization freedesktop vim cryptsetup version-control) +(define patch-libvirt + (options->transformation + '((with-patch . "libvirt=patches/libvirt-qemu-caps.patch")))) + (operating-system (locale "en_GB.utf8") (timezone "Europe/London") @@ -149,16 +154,18 @@ ;; Time (service ntp-service-type) - ;; Virtualization - (service libvirt-service-type) - (service virtlog-service-type) - - ;; udev - (udev-rules-service 'pipewire-add-udev-rules pipewire) - - ;; dom0 home - (service guix-home-service-type - `(("dom0" ,dom0-home-environment)))))) + ;; Virtualization + (service libvirt-service-type + (libvirt-configuration + (libvirt (patch-libvirt libvirt)))) + (service virtlog-service-type) + + ;; udev + (udev-rules-service 'pipewire-add-udev-rules pipewire) + + ;; dom0 home + (service guix-home-service-type + `(("dom0" ,dom0-home-environment)))))) ;; Packages (system-wide) (packages (cons* vim |
