From nobody Wed May 1 20:08:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1600696193; cv=none; d=zohomail.com; s=zohoarc; b=JI7Teq7thnxCHemYieEPWfsQWLnK86SUZ2u+3ADsZCfA9feL8vNCAk3K21AE7CSV2VKhPAJUfuNvK2uWODVS17RnFbFGanvLkRNYKWWXDoqlk91hffSUBCur9etUFWaj/kQoSCixWT/sO71BzrRwQQDjl34hPGrC3eQ2ce8NCjg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1600696193; h=Content-Type:Content-Transfer-Encoding:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=tNWkZrX1YcKEDxh6xs52kXrPEpsH8ZOy9N/UdWElM6I=; b=OQPpPVZp0SSl9sowDvxDarOIhge4MEiez8gV2ZEKfYE1bpgideJ/cbWWyactQ23CTtAlxMGweLryZdkUNAqjGjB9m4BXfkKg6E/osfNIaFG30KUrJU+T8fVEB7AVGlKZc7nR1eq3qy8ZXAysguGRqTRuYApGj6RJ8jP3FP2O61w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1600696193854335.9154155878989; Mon, 21 Sep 2020 06:49:53 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-590-owQ02qnaOCyp3IlDq0Oyuw-1; Mon, 21 Sep 2020 09:49:50 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0D03C8015AA; Mon, 21 Sep 2020 13:49:45 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0973519C4F; Mon, 21 Sep 2020 13:49:42 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 42AF8183D041; Mon, 21 Sep 2020 13:49:40 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 08LDndrM026771 for ; Mon, 21 Sep 2020 09:49:39 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2528010013BD; Mon, 21 Sep 2020 13:49:39 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.40.192.8]) by smtp.corp.redhat.com (Postfix) with ESMTP id 61EFD10013D0 for ; Mon, 21 Sep 2020 13:49:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600696192; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=tNWkZrX1YcKEDxh6xs52kXrPEpsH8ZOy9N/UdWElM6I=; b=R6wH/kOCw9rFUlfidma+WY5bS8m517G4HubQejoMYDr3xNRnd0/LJhwIdI4jNaRQ5lxMb1 9RQ5gag+ibtHQOlAWDhbsy8yasgw0/MXxR1BomAUCl3IBe7HCl5fX5dk4Y1G3txndv8CvN 1CordjjjNQhdCAN5Fbc646C+0rzzS7g= X-MC-Unique: owQ02qnaOCyp3IlDq0Oyuw-1 From: Pavel Hrdina To: libvir-list@redhat.com Subject: [libvirt PATCH] virgdbus: add DBus reply format check Date: Mon, 21 Sep 2020 15:49:34 +0200 Message-Id: <28953b058399b2cc1764daf8671cb3c626920866.1600696064.git.phrdina@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" We used to check the format of reply data with libdbus so we should do the same with GLib DBus as well. Signed-off-by: Pavel Hrdina Reviewed-by: J=C3=A1n Tomko --- At first I thought that this is not necessary as it is unlikely to happen but after Jano found the bug with firewalld getZones function and asked about checking return values I figured out that it will be better to check it because if the returned message would have different format it would be silently ignored. src/rpc/virnetdaemon.c | 1 + src/util/virfirewalld.c | 5 +++++ src/util/virgdbus.c | 8 ++++++-- src/util/virgdbus.h | 2 ++ src/util/virpolkit.c | 1 + src/util/virsystemd.c | 7 +++++++ 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c index 12d4d9bf87..f3a5e9f75c 100644 --- a/src/rpc/virnetdaemon.c +++ b/src/rpc/virnetdaemon.c @@ -487,6 +487,7 @@ virNetDaemonCallInhibit(virNetDaemonPtr dmn, =20 rc =3D virGDBusCallMethodWithFD(systemBus, &reply, + G_VARIANT_TYPE("(h)"), &replyFD, NULL, "org.freedesktop.login1", diff --git a/src/util/virfirewalld.c b/src/util/virfirewalld.c index 12448f0681..a94ac7c183 100644 --- a/src/util/virfirewalld.c +++ b/src/util/virfirewalld.c @@ -95,6 +95,7 @@ virFirewallDGetVersion(unsigned long *version) =20 if (virGDBusCallMethod(sysbus, &reply, + G_VARIANT_TYPE("(v)"), NULL, VIR_FIREWALL_FIREWALLD_SERVICE, "/org/fedoraproject/FirewallD1", @@ -147,6 +148,7 @@ virFirewallDGetBackend(void) =20 if (virGDBusCallMethod(sysbus, &reply, + G_VARIANT_TYPE("(v)"), error, VIR_FIREWALL_FIREWALLD_SERVICE, "/org/fedoraproject/FirewallD1/config", @@ -207,6 +209,7 @@ virFirewallDGetZones(char ***zones, size_t *nzones) =20 if (virGDBusCallMethod(sysbus, &reply, + G_VARIANT_TYPE("(as)"), NULL, VIR_FIREWALL_FIREWALLD_SERVICE, "/org/fedoraproject/FirewallD1", @@ -295,6 +298,7 @@ virFirewallDApplyRule(virFirewallLayer layer, =20 if (virGDBusCallMethod(sysbus, &reply, + G_VARIANT_TYPE("(s)"), error, VIR_FIREWALL_FIREWALLD_SERVICE, "/org/fedoraproject/FirewallD1", @@ -357,6 +361,7 @@ virFirewallDInterfaceSetZone(const char *iface, message =3D g_variant_new("(ss)", zone, iface); =20 return virGDBusCallMethod(sysbus, + NULL, NULL, NULL, VIR_FIREWALL_FIREWALLD_SERVICE, diff --git a/src/util/virgdbus.c b/src/util/virgdbus.c index 535b19f0a4..837c8faf1f 100644 --- a/src/util/virgdbus.c +++ b/src/util/virgdbus.c @@ -181,6 +181,7 @@ virGDBusCloseSystemBus(void) * virGDBusCallMethod: * @conn: a DBus connection * @reply: pointer to receive reply message, or NULL + * @replyType: pointer to GVariantType to validate reply data, or NULL * @error: libvirt error pointer or NULL * @busName: bus identifier of the target service * @objectPath: object path of the target service @@ -198,6 +199,7 @@ virGDBusCloseSystemBus(void) int virGDBusCallMethod(GDBusConnection *conn, GVariant **reply, + const GVariantType *replyType, virErrorPtr error, const char *busName, const char *objectPath, @@ -220,7 +222,7 @@ virGDBusCallMethod(GDBusConnection *conn, ifaceName, method, data, - NULL, + replyType, G_DBUS_CALL_FLAGS_NONE, VIR_DBUS_METHOD_CALL_TIMEOUT_MILIS, NULL, @@ -250,6 +252,7 @@ virGDBusCallMethod(GDBusConnection *conn, int virGDBusCallMethodWithFD(GDBusConnection *conn, GVariant **reply, + const GVariantType *replyType, GUnixFDList **replyFD, virErrorPtr error, const char *busName, @@ -274,7 +277,7 @@ virGDBusCallMethodWithFD(GDBusConnection *conn, ifaceName, method, data, - NULL, + replyType, G_DBUS_CALL_FLAGS_= NONE, VIR_DBUS_METHOD_CA= LL_TIMEOUT_MILIS, dataFD, @@ -342,6 +345,7 @@ virGDBusIsServiceInList(const char *listMethod, =20 rc =3D virGDBusCallMethod(conn, &reply, + G_VARIANT_TYPE("(as)"), NULL, "org.freedesktop.DBus", "/org/freedesktop/DBus", diff --git a/src/util/virgdbus.h b/src/util/virgdbus.h index 6ea717eea2..ca7073e27c 100644 --- a/src/util/virgdbus.h +++ b/src/util/virgdbus.h @@ -45,6 +45,7 @@ virGDBusCloseSystemBus(void); int virGDBusCallMethod(GDBusConnection *conn, GVariant **reply, + const GVariantType *replyType, virErrorPtr error, const char *busName, const char *objectPath, @@ -55,6 +56,7 @@ virGDBusCallMethod(GDBusConnection *conn, int virGDBusCallMethodWithFD(GDBusConnection *conn, GVariant **reply, + const GVariantType *replyType, GUnixFDList **replyFD, virErrorPtr error, const char *busName, diff --git a/src/util/virpolkit.c b/src/util/virpolkit.c index 2ad00fd206..aad924a065 100644 --- a/src/util/virpolkit.c +++ b/src/util/virpolkit.c @@ -104,6 +104,7 @@ int virPolkitCheckAuth(const char *actionid, =20 if (virGDBusCallMethod(sysbus, &reply, + G_VARIANT_TYPE("((bba{ss}))"), NULL, "org.freedesktop.PolicyKit1", "/org/freedesktop/PolicyKit1/Authority", diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c index 32c830c002..8456085476 100644 --- a/src/util/virsystemd.c +++ b/src/util/virsystemd.c @@ -214,6 +214,7 @@ virSystemdGetMachineNameByPID(pid_t pid) =20 if (virGDBusCallMethod(conn, &reply, + G_VARIANT_TYPE("(o)"), NULL, "org.freedesktop.machine1", "/org/freedesktop/machine1", @@ -236,6 +237,7 @@ virSystemdGetMachineNameByPID(pid_t pid) =20 if (virGDBusCallMethod(conn, &reply, + G_VARIANT_TYPE("(v)"), NULL, "org.freedesktop.machine1", object, @@ -384,6 +386,7 @@ int virSystemdCreateMachine(const char *name, gprops); =20 rc =3D virGDBusCallMethod(conn, + NULL, NULL, error, "org.freedesktop.machine1", @@ -430,6 +433,7 @@ int virSystemdCreateMachine(const char *name, gprops); =20 rc =3D virGDBusCallMethod(conn, + NULL, NULL, NULL, "org.freedesktop.machine1", @@ -457,6 +461,7 @@ int virSystemdCreateMachine(const char *name, gprops); =20 rc =3D virGDBusCallMethod(conn, + NULL, NULL, NULL, "org.freedesktop.systemd1", @@ -507,6 +512,7 @@ int virSystemdTerminateMachine(const char *name) =20 VIR_DEBUG("Attempting to terminate machine via systemd"); if (virGDBusCallMethod(conn, + NULL, NULL, error, "org.freedesktop.machine1", @@ -592,6 +598,7 @@ virSystemdPMSupportTarget(const char *methodName, bool = *result) =20 if (virGDBusCallMethod(conn, &reply, + G_VARIANT_TYPE("(s)"), NULL, "org.freedesktop.login1", "/org/freedesktop/login1", --=20 2.26.2