|
|
dc2b6e |
From c70b1a8d8a4bc34bcbf9ef4bccac678257b8c494 Mon Sep 17 00:00:00 2001
|
|
|
dc2b6e |
Message-Id: <c70b1a8d8a4bc34bcbf9ef4bccac678257b8c494@dist-git>
|
|
|
dc2b6e |
From: Vasiliy Ulyanov <vulyanov@suse.de>
|
|
|
dc2b6e |
Date: Wed, 2 Feb 2022 17:28:17 +0100
|
|
|
dc2b6e |
Subject: [PATCH] qemu: gpu: Get pid without binary validation
|
|
|
dc2b6e |
|
|
|
dc2b6e |
The binary validation in virPidFileReadPathIfAlive may fail with EACCES
|
|
|
dc2b6e |
if the calling process does not have CAP_SYS_PTRACE capability.
|
|
|
dc2b6e |
Therefore instead do only the check that the pidfile is locked by the
|
|
|
dc2b6e |
correct process.
|
|
|
dc2b6e |
|
|
|
dc2b6e |
Fixes the same issue as with swtpm.
|
|
|
dc2b6e |
|
|
|
dc2b6e |
Signed-off-by: Vasiliy Ulyanov <vulyanov@suse.de>
|
|
|
dc2b6e |
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
|
|
dc2b6e |
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
|
|
dc2b6e |
(cherry picked from commit e3dfa52d260da8a41a0ec35767d08e37c825824a)
|
|
|
dc2b6e |
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2152188
|
|
|
dc2b6e |
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
|
|
dc2b6e |
---
|
|
|
dc2b6e |
src/qemu/qemu_vhost_user_gpu.c | 9 +++------
|
|
|
dc2b6e |
1 file changed, 3 insertions(+), 6 deletions(-)
|
|
|
dc2b6e |
|
|
|
dc2b6e |
diff --git a/src/qemu/qemu_vhost_user_gpu.c b/src/qemu/qemu_vhost_user_gpu.c
|
|
|
dc2b6e |
index ef198a4820..f7d444e851 100644
|
|
|
dc2b6e |
--- a/src/qemu/qemu_vhost_user_gpu.c
|
|
|
dc2b6e |
+++ b/src/qemu/qemu_vhost_user_gpu.c
|
|
|
dc2b6e |
@@ -54,7 +54,6 @@ qemuVhostUserGPUCreatePidFilename(const char *stateDir,
|
|
|
dc2b6e |
|
|
|
dc2b6e |
/*
|
|
|
dc2b6e |
* qemuVhostUserGPUGetPid:
|
|
|
dc2b6e |
- * @binpath: path of executable associated with the pidfile
|
|
|
dc2b6e |
* @stateDir: the directory where vhost-user-gpu writes the pidfile into
|
|
|
dc2b6e |
* @shortName: short name of the domain
|
|
|
dc2b6e |
* @alias: video device alias
|
|
|
dc2b6e |
@@ -65,8 +64,7 @@ qemuVhostUserGPUCreatePidFilename(const char *stateDir,
|
|
|
dc2b6e |
* set to -1;
|
|
|
dc2b6e |
*/
|
|
|
dc2b6e |
static int
|
|
|
dc2b6e |
-qemuVhostUserGPUGetPid(const char *binPath,
|
|
|
dc2b6e |
- const char *stateDir,
|
|
|
dc2b6e |
+qemuVhostUserGPUGetPid(const char *stateDir,
|
|
|
dc2b6e |
const char *shortName,
|
|
|
dc2b6e |
const char *alias,
|
|
|
dc2b6e |
pid_t *pid)
|
|
|
dc2b6e |
@@ -76,7 +74,7 @@ qemuVhostUserGPUGetPid(const char *binPath,
|
|
|
dc2b6e |
if (!(pidfile = qemuVhostUserGPUCreatePidFilename(stateDir, shortName, alias)))
|
|
|
dc2b6e |
return -1;
|
|
|
dc2b6e |
|
|
|
dc2b6e |
- if (virPidFileReadPathIfAlive(pidfile, pid, binPath) < 0)
|
|
|
dc2b6e |
+ if (virPidFileReadPathIfLocked(pidfile, pid) < 0)
|
|
|
dc2b6e |
return -1;
|
|
|
dc2b6e |
|
|
|
dc2b6e |
return 0;
|
|
|
dc2b6e |
@@ -253,8 +251,7 @@ qemuExtVhostUserGPUSetupCgroup(virQEMUDriver *driver,
|
|
|
dc2b6e |
if (!shortname)
|
|
|
dc2b6e |
return -1;
|
|
|
dc2b6e |
|
|
|
dc2b6e |
- rc = qemuVhostUserGPUGetPid(video->driver->vhost_user_binary,
|
|
|
dc2b6e |
- cfg->stateDir, shortname, video->info.alias, &pid;;
|
|
|
dc2b6e |
+ rc = qemuVhostUserGPUGetPid(cfg->stateDir, shortname, video->info.alias, &pid;;
|
|
|
dc2b6e |
if (rc < 0 || (rc == 0 && pid == (pid_t)-1)) {
|
|
|
dc2b6e |
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
|
|
dc2b6e |
_("Could not get process id of vhost-user-gpu"));
|
|
|
dc2b6e |
--
|
|
|
dc2b6e |
2.39.0
|
|
|
dc2b6e |
|