From patchwork Tue Jul 14 04:51:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Roth X-Patchwork-Id: 11661371 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0609E6C1 for ; Tue, 14 Jul 2020 04:53:43 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CFAF32193E for ; Tue, 14 Jul 2020 04:53:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LrmZe/vH" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CFAF32193E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.vnet.ibm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:46476 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jvCwo-0008EL-5Y for patchwork-qemu-devel@patchwork.kernel.org; Tue, 14 Jul 2020 00:53:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42382) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jvCuf-00043H-Or for qemu-devel@nongnu.org; Tue, 14 Jul 2020 00:51:29 -0400 Received: from mail-qt1-x835.google.com ([2607:f8b0:4864:20::835]:32969) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jvCue-0004tb-5Q for qemu-devel@nongnu.org; Tue, 14 Jul 2020 00:51:29 -0400 Received: by mail-qt1-x835.google.com with SMTP id 6so11911626qtt.0 for ; Mon, 13 Jul 2020 21:51:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=QV/g2t0NpdkBzTj+x8KMODp4Xrlo4zYUbZRu8cLnIcU=; b=LrmZe/vH3Ng1h7jx/6ZRnIj6PZtvMi1ExAHnZJvKc/7KE85U0nyaTAPRz6ERu5Hnbq 4zH/s/O1X4ktRztPznrFwjRAc3YVhPepmYkcDxufBD5fDfQ5ZWrGpbms6fNFRmMNyeij UMS3SVK57jGjfAflwcJ9hIaj1wJY3vpMq6hiiHNylfORgQ+PiCsZGcHEXRQBYGQb41qh XD7GIpHeVD9X84W3PBFMw0ut0I6Ww0Tq6aCBHdHjeFRBvD983JsqWKtiKupEgvnyNTpQ 9mY66jO31cMFEDGt2U3XiASroBTeofnPh7Mh+0wXC6W4n+VM/YYS8X4+ee9UODEwPUgb pxIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=QV/g2t0NpdkBzTj+x8KMODp4Xrlo4zYUbZRu8cLnIcU=; b=SZZQ7P6V/JabYT4qV1UWxNaRjJaPCXA03jrGuB+CJSuoXZ/HY7rf1qnt0+QyxO6Hvu utAOiNz5hhzSH1Utbz8caaej4tFaj3QEtVhOZez2BXD+EVJOWXvjNXczF25z4x04f5Hg HhlBq9JKLJqn2qEY4n3xOfvBP3nMtImwjo3ySdypD/7bW/S7TKPk/9by2XGhxp/ltSJJ qABaDjgP2hKoJY2UtB3oeCplUWMj9TldNCzpMRULZL4wD+Avj5wN5vIBis5QebmQxm6k 6t7wYdvdCQb+mVtwMRH/xFMOOUp3NN3XYsSUj0WdcIByJs1TD4zsiJucaQ56NSt16Sh7 UZ+Q== X-Gm-Message-State: AOAM531gTI0i04FBXm9mmMEUSfv6ZMyBjZyZXY4iOTkIUjyQ3ecDtspq jatZrh521vcHALKSqMaPoaYbcH9X X-Google-Smtp-Source: ABdhPJyGtSpehM1kJXgDrA4OAW7fRpC0A6TBLbJ4H8TbkMuXJLlBxTU67egt8A+ykqGiVfTgQhvSDA== X-Received: by 2002:ac8:4718:: with SMTP id f24mr2676557qtp.95.1594702286667; Mon, 13 Jul 2020 21:51:26 -0700 (PDT) Received: from localhost (76-251-165-188.lightspeed.austtx.sbcglobal.net. [76.251.165.188]) by smtp.gmail.com with ESMTPSA id m4sm23060359qtf.43.2020.07.13.21.51.25 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Jul 2020 21:51:26 -0700 (PDT) From: Michael Roth To: qemu-devel@nongnu.org Subject: [PULL 1/4] qga-win: Fix QGA VSS Provider service stop failure Date: Mon, 13 Jul 2020 23:51:11 -0500 Message-Id: <20200714045114.29319-2-mdroth@linux.vnet.ibm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200714045114.29319-1-mdroth@linux.vnet.ibm.com> References: <20200714045114.29319-1-mdroth@linux.vnet.ibm.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::835; envelope-from=flukshun@gmail.com; helo=mail-qt1-x835.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, Basil Salman , Basil Salman Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Basil Salman On one hand "guest-fsfreeze-freeze" command, "COM+ System Application service" is stopped, on the other hand "guest-fsfreeze-thaw" stops QGA VSS Provider service from "COM+ Application Admin Catalog". Invoking a series of freeze and thaw commands may result in QGA failing to stop VSS Provider service as "COM+ System Application service" is stopped, which can cause some delay in qga response. In this commit StopService function was changed and VSS Provider service is now stopped using Winsvc library API. BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1549425 Signed-off-by: Basil Salman Signed-off-by: Basil Salman Signed-off-by: Michael Roth --- qga/vss-win32/install.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp index a456841360..40de133774 100644 --- a/qga/vss-win32/install.cpp +++ b/qga/vss-win32/install.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #define BUFFER_SIZE 1024 @@ -509,26 +510,32 @@ namespace _com_util } } -/* Stop QGA VSS provider service from COM+ Application Admin Catalog */ - +/* Stop QGA VSS provider service using Winsvc API */ STDAPI StopService(void) { HRESULT hr; - COMInitializer initializer; - COMPointer pUnknown; - COMPointer pCatalog; + SC_HANDLE manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); + SC_HANDLE service = NULL; - int count = 0; + if (!manager) { + errmsg(E_FAIL, "Failed to open service manager"); + hr = E_FAIL; + goto out; + } + service = OpenService(manager, QGA_PROVIDER_NAME, SC_MANAGER_ALL_ACCESS); - chk(QGAProviderFind(QGAProviderCount, (void *)&count)); - if (count) { - chk(CoCreateInstance(CLSID_COMAdminCatalog, NULL, CLSCTX_INPROC_SERVER, - IID_IUnknown, (void **)pUnknown.replace())); - chk(pUnknown->QueryInterface(IID_ICOMAdminCatalog2, - (void **)pCatalog.replace())); - chk(pCatalog->ShutdownApplication(_bstr_t(QGA_PROVIDER_LNAME))); + if (!service) { + errmsg(E_FAIL, "Failed to open service"); + hr = E_FAIL; + goto out; + } + if (!(ControlService(service, SERVICE_CONTROL_STOP, NULL))) { + errmsg(E_FAIL, "Failed to stop service"); + hr = E_FAIL; } out: + CloseServiceHandle(service); + CloseServiceHandle(manager); return hr; } From patchwork Tue Jul 14 04:51:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Michael Roth X-Patchwork-Id: 11661365 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1668B6C1 for ; Tue, 14 Jul 2020 04:52:33 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E138D2193E for ; Tue, 14 Jul 2020 04:52:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Cn5eHwOZ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E138D2193E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.vnet.ibm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:40260 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jvCvg-0005jQ-6E for patchwork-qemu-devel@patchwork.kernel.org; Tue, 14 Jul 2020 00:52:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42396) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jvCuh-00044V-2W; Tue, 14 Jul 2020 00:51:31 -0400 Received: from mail-qt1-x829.google.com ([2607:f8b0:4864:20::829]:35174) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jvCuf-0004tq-Ky; Tue, 14 Jul 2020 00:51:30 -0400 Received: by mail-qt1-x829.google.com with SMTP id b25so11917396qto.2; Mon, 13 Jul 2020 21:51:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PBERzEG1GysXrcTH7gh8mB6ppyy7Uo8bs5uoGDwt1Fs=; b=Cn5eHwOZrScNQnscimp5IIcuOk94pEqIzHfq6YJzxb3TXexWrSORio/EbauMdx27O8 7fJKurH2Yupq2GydQSaCI6a9zMpYq+P07h29YNy/TSYFR4XtdefjngUzmD/5Gice7EZs p6fGmq9AdI8HFeaJIAr0bzrpFfe81ofDJbtJA1COuCwMovjXxxxSlJ1Mw8Ebejwvb0+z TNZkx7D7RMNKnYh92DRAqgd4fWYRNizvdC1Mj0dLglLB4xdrjA9RElJrqjZjvX7s4QYU tWO8/oNZY+9Zvmzue3inM8n9jmUvkomp3+tcmMtipB1sBq4cSEX4iF589QTvNdEhtuY2 BWVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=PBERzEG1GysXrcTH7gh8mB6ppyy7Uo8bs5uoGDwt1Fs=; b=nrr+JEX1b90gQgNLmW3ti9bAIC/rX0X158Hrk8JstYH5od7jCsH1sGw2Tnh4L+wlZI tiXaHJPEQi4R2tuLhq9u3Kuivm3jAmWMO8wmv1siSZd/wmxe8wR9uos+dIh2zoADM0Ay SCuaxYEJXC2GHmmeC3buhHQYFHCHXZ9XZ5+mYX7JFmRgBJSgYzE0Hw7AbgoucAsgIzq6 VxFJwHmru7ItXE/2smdwZce0+PD9VMD5UoLI6LFB+8G1HZS/TmBtYV/gqjXAX9VeCYmj mqKnh9wASOucwfCWHhxHa23x4sqlcgznih2cEuXfBE9ThOshpaZ9YNNgZ0wtjB2MeK/B 1V2A== X-Gm-Message-State: AOAM530P5ErWU6cFHnFAiLaPwkm8bu+Rr/92ZEpp/E3/ngE9T5HPsB9h Ga5w15ZGYvf+0qVrjtgQHAnHTu95 X-Google-Smtp-Source: ABdhPJy0Ps7369osGxGFHDrbyAKxkSKcwLMj7vIgQ1CSyuk4Z/wqZMW053tdnMwNhIUvc475m/ZQ8g== X-Received: by 2002:ac8:33f8:: with SMTP id d53mr2849248qtb.80.1594702288048; Mon, 13 Jul 2020 21:51:28 -0700 (PDT) Received: from localhost (76-251-165-188.lightspeed.austtx.sbcglobal.net. [76.251.165.188]) by smtp.gmail.com with ESMTPSA id p3sm20518750qtl.21.2020.07.13.21.51.27 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Jul 2020 21:51:27 -0700 (PDT) From: Michael Roth To: qemu-devel@nongnu.org Subject: [PULL 2/4] qga: fix assert regression on guest-shutdown Date: Mon, 13 Jul 2020 23:51:12 -0500 Message-Id: <20200714045114.29319-3-mdroth@linux.vnet.ibm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200714045114.29319-1-mdroth@linux.vnet.ibm.com> References: <20200714045114.29319-1-mdroth@linux.vnet.ibm.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::829; envelope-from=flukshun@gmail.com; helo=mail-qt1-x829.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-stable@nongnu.org, =?utf-8?q?Marc-Andr?= =?utf-8?q?=C3=A9_Lureau?= Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Marc-André Lureau Since commit 781f2b3d1e ("qga: process_event() simplification"), send_response() is called unconditionally, but will assert when "rsp" is NULL. This may happen with QCO_NO_SUCCESS_RESP commands, such as "guest-shutdown". Fixes: 781f2b3d1e5ef389b44016a897fd55e7a780bf35 Cc: Michael Roth Reported-by: Christian Ehrhardt Signed-off-by: Marc-André Lureau Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Christian Ehrhardt Tested-by: Christian Ehrhardt Cc: qemu-stable@nongnu.org Signed-off-by: Michael Roth --- qga/main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/qga/main.c b/qga/main.c index f0e454f28d..3febf3b0fd 100644 --- a/qga/main.c +++ b/qga/main.c @@ -531,7 +531,11 @@ static int send_response(GAState *s, const QDict *rsp) QString *payload_qstr, *response_qstr; GIOStatus status; - g_assert(rsp && s->channel); + g_assert(s->channel); + + if (!rsp) { + return 0; + } payload_qstr = qobject_to_json(QOBJECT(rsp)); if (!payload_qstr) { From patchwork Tue Jul 14 04:51:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Michael Roth X-Patchwork-Id: 11661367 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A6ED51392 for ; Tue, 14 Jul 2020 04:52:34 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7DEF22193E for ; Tue, 14 Jul 2020 04:52:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gZA4fa5N" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7DEF22193E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.vnet.ibm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:40394 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jvCvh-0005nd-LR for patchwork-qemu-devel@patchwork.kernel.org; Tue, 14 Jul 2020 00:52:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42408) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jvCui-00047X-P5; Tue, 14 Jul 2020 00:51:32 -0400 Received: from mail-qt1-x844.google.com ([2607:f8b0:4864:20::844]:46730) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jvCuh-0004u7-7Z; Tue, 14 Jul 2020 00:51:32 -0400 Received: by mail-qt1-x844.google.com with SMTP id i3so11860924qtq.13; Mon, 13 Jul 2020 21:51:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iKj8QRlEHnqQiQIMVUyx74CJD+1/xr2oFDQvFu0P86g=; b=gZA4fa5NxvZLxT7grMJolKq91xCjVvT8jUa4VoeoQ37Zt1nHyexY+3w2ymmqBzTg/b s6SL0QSJceP7IVHCooku83imwJsfJPcQLuXI52mdG5BSii+ZTlLSpzWyDdDxX7mhRvEv ioHuJvwXWrqF/NHkeNvgD+F8tqYjmNdS8fabJPARLnLooPa2bieH/z62aC02D9fmMsTf q6s9KUeZr1lqM+HIdlyU7/oxjQUpHIAWwOco2yCcJ3CIrTPfnizoImhlBo1vSB+BZJ9J SQwS1D9Hf86jFnIRMYOtmbH4SgVy2b/U+6kz94KIdTp+wFVb4pf2Tv7S66pe/NdKzzOo zebA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=iKj8QRlEHnqQiQIMVUyx74CJD+1/xr2oFDQvFu0P86g=; b=bMAvhcWhDz1r+SKIG+CJnnOt9bJsu7UDFUCKffQaIaII2Vrfwmv8zadIHgjTNMARD3 meWOsqpKP43X/V1/S8ah/dmrmmw2IVB/6JJ0DA8/XXFtAv9TqDQ3KMlBZeb/YcFlwSuo p90oxBlzJQjhHLoaCg6Zt2RLsoMqsUhuuxUNeAEWtMkX0jkfeJL9rRfWi3co3e7DrR0y /ELE2ofgsxWuoubURNKPNpObyO7xG6lwwH7cy3gwTXEO6sy3O9mSSO1ttYasEzhzZut2 A5pYjH4CL3MEFZkXJVJKh+saGe9+PDzxT/oPZt+Idgezwq+cGvZF7visBveM36GaGVKh gukw== X-Gm-Message-State: AOAM531cAnP7ORF/gJjDfK1PUvjuQYX9yb08cxCBq5OSjNZB9MrzsYQF GipVKLpGUJcLuml9wZIPGnGseabr X-Google-Smtp-Source: ABdhPJw9pbjlDMYjYUGRWBPGq/oxTABJG9F496KlXrJgyWwvFustjn8tuJbIoeNnnEpBE1fbWzFlFw== X-Received: by 2002:ac8:4643:: with SMTP id f3mr2947246qto.128.1594702289484; Mon, 13 Jul 2020 21:51:29 -0700 (PDT) Received: from localhost (76-251-165-188.lightspeed.austtx.sbcglobal.net. [76.251.165.188]) by smtp.gmail.com with ESMTPSA id m14sm22046370qke.99.2020.07.13.21.51.28 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Jul 2020 21:51:28 -0700 (PDT) From: Michael Roth To: qemu-devel@nongnu.org Subject: [PULL 3/4] util: Introduce qemu_get_host_name() Date: Mon, 13 Jul 2020 23:51:13 -0500 Message-Id: <20200714045114.29319-4-mdroth@linux.vnet.ibm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200714045114.29319-1-mdroth@linux.vnet.ibm.com> References: <20200714045114.29319-1-mdroth@linux.vnet.ibm.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::844; envelope-from=flukshun@gmail.com; helo=mail-qt1-x844.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-stable@nongnu.org, Michal Privoznik Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Michal Privoznik This function offers operating system agnostic way to fetch host name. It is implemented for both POSIX-like and Windows systems. Signed-off-by: Michal Privoznik Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Daniel P. Berrangé Cc: qemu-stable@nongnu.org Signed-off-by: Michael Roth --- include/qemu/osdep.h | 10 ++++++++++ util/oslib-posix.c | 35 +++++++++++++++++++++++++++++++++++ util/oslib-win32.c | 13 +++++++++++++ 3 files changed, 58 insertions(+) diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index 979a403984..4841b5c6b5 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -655,4 +655,14 @@ static inline void qemu_reset_optind(void) #endif } +/** + * qemu_get_host_name: + * @errp: Error object + * + * Operating system agnostic way of querying host name. + * + * Returns allocated hostname (caller should free), NULL on failure. + */ +char *qemu_get_host_name(Error **errp); + #endif diff --git a/util/oslib-posix.c b/util/oslib-posix.c index 72907d4d7f..e60aea85b6 100644 --- a/util/oslib-posix.c +++ b/util/oslib-posix.c @@ -794,3 +794,38 @@ void sigaction_invoke(struct sigaction *action, } action->sa_sigaction(info->ssi_signo, &si, NULL); } + +#ifndef HOST_NAME_MAX +# ifdef _POSIX_HOST_NAME_MAX +# define HOST_NAME_MAX _POSIX_HOST_NAME_MAX +# else +# define HOST_NAME_MAX 255 +# endif +#endif + +char *qemu_get_host_name(Error **errp) +{ + long len = -1; + g_autofree char *hostname = NULL; + +#ifdef _SC_HOST_NAME_MAX + len = sysconf(_SC_HOST_NAME_MAX); +#endif /* _SC_HOST_NAME_MAX */ + + if (len < 0) { + len = HOST_NAME_MAX; + } + + /* Unfortunately, gethostname() below does not guarantee a + * NULL terminated string. Therefore, allocate one byte more + * to be sure. */ + hostname = g_new0(char, len + 1); + + if (gethostname(hostname, len) < 0) { + error_setg_errno(errp, errno, + "cannot get hostname"); + return NULL; + } + + return g_steal_pointer(&hostname); +} diff --git a/util/oslib-win32.c b/util/oslib-win32.c index e9b14ab178..3b49d27297 100644 --- a/util/oslib-win32.c +++ b/util/oslib-win32.c @@ -808,3 +808,16 @@ bool qemu_write_pidfile(const char *filename, Error **errp) } return true; } + +char *qemu_get_host_name(Error **errp) +{ + wchar_t tmp[MAX_COMPUTERNAME_LENGTH + 1]; + DWORD size = G_N_ELEMENTS(tmp); + + if (GetComputerNameW(tmp, &size) == 0) { + error_setg_win32(errp, GetLastError(), "failed close handle"); + return NULL; + } + + return g_utf16_to_utf8(tmp, size, NULL, NULL, NULL); +} From patchwork Tue Jul 14 04:51:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Michael Roth X-Patchwork-Id: 11661369 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9EEA91392 for ; Tue, 14 Jul 2020 04:52:43 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 726762193E for ; Tue, 14 Jul 2020 04:52:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JmU+4mRr" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 726762193E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.vnet.ibm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:41404 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jvCvq-0006CS-D2 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 14 Jul 2020 00:52:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42420) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jvCuk-0004CG-D5; Tue, 14 Jul 2020 00:51:34 -0400 Received: from mail-qv1-xf42.google.com ([2607:f8b0:4864:20::f42]:41222) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jvCui-0004uL-Mv; Tue, 14 Jul 2020 00:51:34 -0400 Received: by mail-qv1-xf42.google.com with SMTP id t7so6908330qvl.8; Mon, 13 Jul 2020 21:51:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6zfDC1IpCS6Uind9hNMhnPD8YUtgy8op4476VImHmB0=; b=JmU+4mRrKv2vFERIp1+TDI/G3Bc/dUkgyDk0toYhWLr/sPQkt4/OFuEqW7eVFLxc4t mLMIeXa9sCQ70egy1Q9HtGDM9p1UiDDujUzwnGeVKoc/YrBNgqJsTVah0vqPAUb/HxVp db7KQnFF0Gc8kGvzncqdg2IFcmI23GGa/nfAk3AJUfC34M86rWfd5Bf7TGRzSRWFUOIE NT7zanEqE0SWF03y74MyLQPT7qfRzuIMDiAAcbxHRcFDHN3Wxp0IcgZ19ZMe5gQWteJT B7isXYgGyYEQPg2QNV9Mec6FmfHtjRTHT4RGrFSRJFtPDPrGKbDaVqgoivbtvygktulY lYlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=6zfDC1IpCS6Uind9hNMhnPD8YUtgy8op4476VImHmB0=; b=rr1LLYCK/Obf+Zg8LBAnkqzMrrZPByYU/PfESV4x3HvgWHEfB3ZrfCKSpLZrlRg45Q xkONbRQHdvEi++GTSPRun4CHZYdHieBaAhE/B461DG4mxZDOyaoF/jld1VIYIrFELF0f ClZENHnZJlBBhTzizheDTcHKD66xluW2gkJTRJGjvGVffKFthbcXREOuRI50c/xKB4bl aQjBICoM6TFomV2nTVPRXuFj+wftiiJHMW3jjIGZ0fa6xdpwdQw3/aaJYL1xC0bpfIOW scfhyZNyuY8WYE2Pe2OK4fRK6ihKqdTZhnmYx/xP/vb1wk2xPdVke5QjLC21nO1Ahfcu 9bkw== X-Gm-Message-State: AOAM5310Uw+/zrSK54c5QiQoFUeG2DasAT7nz/e84f3EsJeh3hwiwsWX 4/jj6sOiWFweKaFYsjZNKM/DtNrr X-Google-Smtp-Source: ABdhPJxzp+zxTrtYWZIZbL/7UlAfrKJXrRmyWN2Z64knfWKEfzgz1+8npMB9yCC81FvuIt7+OoOxqQ== X-Received: by 2002:a0c:b712:: with SMTP id t18mr2776144qvd.205.1594702291258; Mon, 13 Jul 2020 21:51:31 -0700 (PDT) Received: from localhost (76-251-165-188.lightspeed.austtx.sbcglobal.net. [76.251.165.188]) by smtp.gmail.com with ESMTPSA id g30sm24139571qte.72.2020.07.13.21.51.30 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Jul 2020 21:51:30 -0700 (PDT) From: Michael Roth To: qemu-devel@nongnu.org Subject: [PULL 4/4] qga: Use qemu_get_host_name() instead of g_get_host_name() Date: Mon, 13 Jul 2020 23:51:14 -0500 Message-Id: <20200714045114.29319-5-mdroth@linux.vnet.ibm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200714045114.29319-1-mdroth@linux.vnet.ibm.com> References: <20200714045114.29319-1-mdroth@linux.vnet.ibm.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::f42; envelope-from=flukshun@gmail.com; helo=mail-qv1-xf42.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-stable@nongnu.org, Michal Privoznik Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" From: Michal Privoznik Problem with g_get_host_name() is that on the first call it saves the hostname into a global variable and from then on, every subsequent call returns the saved hostname. Even if the hostname changes. This doesn't play nicely with guest agent, because if the hostname is acquired before the guest is set up (e.g. on the first boot, or before DHCP) we will report old, invalid hostname. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1845127 Signed-off-by: Michal Privoznik Reviewed-by: Daniel P. Berrangé Cc: qemu-stable@nongnu.org Signed-off-by: Michael Roth --- qga/commands.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/qga/commands.c b/qga/commands.c index efc8b90281..d3fec807c1 100644 --- a/qga/commands.c +++ b/qga/commands.c @@ -515,11 +515,20 @@ int ga_parse_whence(GuestFileWhence *whence, Error **errp) GuestHostName *qmp_guest_get_host_name(Error **errp) { GuestHostName *result = NULL; - gchar const *hostname = g_get_host_name(); - if (hostname != NULL) { - result = g_new0(GuestHostName, 1); - result->host_name = g_strdup(hostname); + g_autofree char *hostname = qemu_get_host_name(errp); + + /* + * We want to avoid using g_get_host_name() because that + * caches the result and we wouldn't reflect changes in the + * host name. + */ + + if (!hostname) { + hostname = g_strdup("localhost"); } + + result = g_new0(GuestHostName, 1); + result->host_name = g_steal_pointer(&hostname); return result; }