From 99e04f1ac063bd1c62f8477a05a07f1883203475 Mon Sep 17 00:00:00 2001 From: Roman Bogorodskiy Date: Sun, 14 Jun 2026 07:58:10 +0200 Subject: [PATCH] bhyve: fix bhyveConnectAgent() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The bhyveConnectAgent() function calls qemuAgentOpen() to open an agent connection. If it fails, e.g. because of insufficient permissions to open the socket, it returns NULL. Currently, if that happens, bhyveConnectAgent() just sets agentError to true and exits with 0. This does not match the contract of bhyveDomainEnsureAgent(), which should either provide an agent connection or fail. Fix that by returning -1 when qemuAgentOpen() fails. To make intent clearer, add a documentation for bhyveConnectAgent(). Signed-off-by: Roman Bogorodskiy Reviewed-by: Ján Tomko --- src/bhyve/bhyve_process.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index e92bdeb416..2221d8700a 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -238,6 +238,18 @@ static qemuAgentCallbacks agentCallbacks = { .errorNotify = bhyveProcessHandleAgentError, }; +/** + * bhyveConnectAgent: + * @driver: driver object + * @vm: domain object + * + * Connect to the guest agent via the UNIX socket specified in the domain + * definition. On success, bhyveDomainObjPrivate's agent field should + * point to the agent instance. + * + * Returns: 0 on success, + * -1 on error + */ int bhyveConnectAgent(struct _bhyveConn *driver G_GNUC_UNUSED, virDomainObj *vm) { @@ -269,9 +281,10 @@ bhyveConnectAgent(struct _bhyveConn *driver G_GNUC_UNUSED, virDomainObj *vm) priv->agent = agent; if (!priv->agent) { - VIR_WARN("Cannot connect to QEMU guest agent for %s", vm->def->name); - priv->agentError = true; - virResetLastError(); + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Cannot connect to QEMU guest agent for %1$s"), + vm->def->name); + return -1; } return 0; -- 2.47.3