qubes-libvchan-xen: rebuild against sen 4.18

This commit is contained in:
Antoine Martin 2023-12-07 19:33:57 -05:00
parent 71f28ef65f
commit 0b252eff75
Signed by: forge
GPG key ID: D62A472A4AA7D541
2 changed files with 66 additions and 3 deletions

View file

@ -0,0 +1,59 @@
From 8c4c3807119f27957e6c7f87d505d66d0ea4c3d0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
<marmarek@invisiblethingslab.com>
Date: Sat, 18 Nov 2023 18:27:28 +0100
Subject: [PATCH] Support changed libxenctrl API in Xen 4.18.0
The xc_domain_getinfo() is gone, it's replaced with
xc_domain_getinfo_single. While the new API is a bit nicer, xenctrl.h
does not provide any #define to know which one is available. Check
library version in the makefile for that.
---
vchan/Makefile.linux | 4 ++++
vchan/io.c | 10 ++++++++++
2 files changed, 14 insertions(+)
diff --git a/vchan/Makefile.linux b/vchan/Makefile.linux
index 281f2b5..587cb34 100644
--- a/vchan/Makefile.linux
+++ b/vchan/Makefile.linux
@@ -27,6 +27,10 @@ CFLAGS += -g -Wall -Wextra -Werror -fPIC -O2 -D_GNU_SOURCE -MD -MP -MF $@.dep
all: libvchan-xen.so vchan-xen.pc
-include *.dep
+# xenctrl.h does not provide any #define to distinguish API versions
+XENCTRL_VERSION := $(shell pkg-config --modversion xencontrol)
+CFLAGS += $(shell if printf '%s\n' '4.18.0' '$(XENCTRL_VERSION)' | \
+ sort -CV; then echo -DHAVE_XC_DOMAIN_GETINFO_SINGLE; fi)
SO_VER = 1
libvchan-xen.so.$(SO_VER): init.o io.o
diff --git a/vchan/io.c b/vchan/io.c
index 3d0ed35..0c23223 100644
--- a/vchan/io.c
+++ b/vchan/io.c
@@ -33,14 +33,24 @@
/* check if domain is still alive */
int libvchan__check_domain_alive(xc_interface *xc_handle, int dom) {
struct evtchn_status evst;
+#ifdef HAVE_XC_DOMAIN_GETINFO_SINGLE
+ xc_domaininfo_t dominfo;
+#else
xc_dominfo_t dominfo;
+#endif
int ret;
/* first try using domctl, more reliable but available in a privileged
* domain only */
+#ifdef HAVE_XC_DOMAIN_GETINFO_SINGLE
+ ret = xc_domain_getinfo_single(xc_handle, dom, &dominfo);
+ if (ret == 0)
+ return !(dominfo.flags & XEN_DOMINF_dying);
+#else
ret = xc_domain_getinfo(xc_handle, dom, 1, &dominfo);
if (ret == 1)
return dominfo.domid == (uint32_t)dom && !dominfo.dying;
+#endif
else if (ret == -1 && errno == ESRCH)
return 0;
/* otherwise fallback to xc_evtchn_status method */

View file

@ -3,18 +3,21 @@
pkgname=qubes-libvchan-xen pkgname=qubes-libvchan-xen
pkgver=4.2.1 pkgver=4.2.1
pkgrel=2 pkgrel=3
_gittag=v$pkgver _gittag=v$pkgver
pkgdesc="The Qubes core libraries for installation inside a Qubes Dom0 and VM." pkgdesc="The Qubes core libraries for installation inside a Qubes Dom0 and VM."
arch="x86_64" arch="x86_64"
url="https://github.com/QubesOS/qubes-core-vchan-xen" url="https://github.com/QubesOS/qubes-core-vchan-xen"
license='GPL' license='GPL'
depends="xen" depends="xen"
makedepends="xen-dev" makedepends="xen-dev coreutils"
builddir="$srcdir"/qubes-core-vchan-xen-$pkgver builddir="$srcdir"/qubes-core-vchan-xen-$pkgver
subpackages="$pkgname-dev" subpackages="$pkgname-dev"
source="$pkgname-$_gittag.tar.gz::https://github.com/QubesOS/qubes-core-vchan-xen/archive/refs/tags/$_gittag.tar.gz" source="
$pkgname-$_gittag.tar.gz::https://github.com/QubesOS/qubes-core-vchan-xen/archive/refs/tags/$_gittag.tar.gz
39_support-changed-libxenctrl-api-xen418.patch
"
build() { build() {
cd "$builddir"/vchan cd "$builddir"/vchan
@ -27,4 +30,5 @@ package() {
sha512sums=" sha512sums="
2094f84fd3ca36b61c4d2a243a499425153dc4d3ca944f75763c7e23b985a40cb8ac2b41aad99074b8a7f1d871aaad87da9db2ec5bbc68adc7e717a0a2fbebff qubes-libvchan-xen-v4.2.1.tar.gz 2094f84fd3ca36b61c4d2a243a499425153dc4d3ca944f75763c7e23b985a40cb8ac2b41aad99074b8a7f1d871aaad87da9db2ec5bbc68adc7e717a0a2fbebff qubes-libvchan-xen-v4.2.1.tar.gz
90a67ff34d3f4aa5a0534fd88192f61e4d1d94cfa26e7b2ae52ecdb0862d5b27500162a7a1eb83db072387a4573f082afdf5482caaf7070d282267ef9e044bad 39_support-changed-libxenctrl-api-xen418.patch
" "