From nobody Mon Feb 9 19:54:16 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500027692069326.11481032771576; Fri, 14 Jul 2017 03:21:32 -0700 (PDT) Received: from localhost ([::1]:36757 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVxiz-00023r-Kt for importer@patchew.org; Fri, 14 Jul 2017 06:21:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42358) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dVxYV-0000CI-IW for qemu-devel@nongnu.org; Fri, 14 Jul 2017 06:10:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dVxYT-0004yY-Vl for qemu-devel@nongnu.org; Fri, 14 Jul 2017 06:10:39 -0400 Received: from mail-wr0-x241.google.com ([2a00:1450:400c:c0c::241]:35962) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dVxYT-0004we-Li for qemu-devel@nongnu.org; Fri, 14 Jul 2017 06:10:37 -0400 Received: by mail-wr0-x241.google.com with SMTP id 77so11332116wrb.3 for ; Fri, 14 Jul 2017 03:10:37 -0700 (PDT) Received: from 640k.lan (94-39-191-51.adsl-ull.clienti.tiscali.it. [94.39.191.51]) by smtp.gmail.com with ESMTPSA id 143sm2934870wmg.9.2017.07.14.03.10.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 14 Jul 2017 03:10:35 -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=tfTwvzBMxdFW5o1LDFz6mt1BXaIOZCW0AhU9mHEDXlI=; b=RMM3l+6XZ737rnQq2SqE0AwHF287SuDsFIGg54Xzus+kG9eoBnkylRGGYvxYaXOl6T W3hHRw0MqX73mk+0RmO2oxj7Wjh9qB/ndHyFz5U4B+BFHlvC5pm/tWi3yrspKFcRbWHe NR16TQd1ZKHzkhX3KwCMefqKdURx+qIvXXzalGvvoxpdHc2eiEypBQeSC8V1Vwofb0Ks UE8G77Hro7p6W+5CTo4vPGOul8w+HEPAOyWuwGXTJ2gAMC9PK1iPRdJY/x1IC56xoGed QN27eQrqHoYocyOipTM6aZ+0cCRhQpDvXx2sVVLWJjh0oTwWy5Jk9d1YBlxwd4OjOqFU GDGw== 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=tfTwvzBMxdFW5o1LDFz6mt1BXaIOZCW0AhU9mHEDXlI=; b=pViYTrS2qiGO3liZqHSxzIZk1WVfGsO3ilXjux978qjklviNUNkGQabaRYh6KCCrYn M8oBdIaVzBT+n+soEdSOSVRV09XDm/b8RTzadkq/SELVlTOSeJqk2mvw7ZC9a/6fjBBi Yo3LVYNYVUhoAkvFqtZhJ3i/+DpTEOIEQuoeWfA4Yk0kGs9kgA2UKtavTCk6VjLTKs5m 3YOFbIZVr/o/z+ZXrDv2WZz5wf2EdJdIMNjKc1pA3crbaBc3r58M9k1nRMHey0hNzdNb MfIEFWKjzbQPI4t1MVxsb8esBDOeOFCfMw7Q81aJW2UhBnDcrbrlCDDVEXvLZ+uLnjBK F2Dw== X-Gm-Message-State: AIVw113YSDyevc2UNNQiBz58MazNvtbY0j+D9nNAZTUqy77wtje7L7iQ NCjCT6hV72sdXtWfNqo= X-Received: by 10.223.179.8 with SMTP id j8mr1449385wrd.190.1500027036444; Fri, 14 Jul 2017 03:10:36 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Fri, 14 Jul 2017 12:10:15 +0200 Message-Id: <1500027028-4127-4-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1500027028-4127-1-git-send-email-pbonzini@redhat.com> References: <1500027028-4127-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::241 Subject: [Qemu-devel] [PULL 42/55] qom: enforce readonly nature of link's check callback X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Igor Mammedov , Fam Zheng Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Igor Mammedov link's check callback is supposed to verify/permit setting it, however currently nothing restricts it from misusing it and modifying target object from within. Make sure that readonly semantics are checked by compiler to prevent callback's misuse. Signed-off-by: Igor Mammedov Signed-off-by: Fam Zheng Message-Id: <20170714021509.23681-2-famz@redhat.com> Signed-off-by: Paolo Bonzini --- hw/core/qdev-properties.c | 3 ++- hw/display/xlnx_dp.c | 2 +- hw/ipmi/ipmi.c | 2 +- hw/mem/pc-dimm.c | 2 +- hw/misc/ivshmem.c | 2 +- hw/virtio/virtio-crypto.c | 2 +- include/hw/qdev-properties.h | 3 ++- include/qom/object.h | 6 +++--- qom/object.c | 8 ++++---- 9 files changed, 16 insertions(+), 14 deletions(-) diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index f11d578..113ce7d 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -25,7 +25,8 @@ void qdev_prop_set_after_realize(DeviceState *dev, const = char *name, } } =20 -void qdev_prop_allow_set_link_before_realize(Object *obj, const char *name, +void qdev_prop_allow_set_link_before_realize(const Object *obj, + const char *name, Object *val, Error **errp) { DeviceState *dev =3D DEVICE(obj); diff --git a/hw/display/xlnx_dp.c b/hw/display/xlnx_dp.c index a77d7db..561f828 100644 --- a/hw/display/xlnx_dp.c +++ b/hw/display/xlnx_dp.c @@ -515,7 +515,7 @@ static void xlnx_dp_aux_set_command(XlnxDPState *s, uin= t32_t value) s->core_registers[DP_INTERRUPT_SIGNAL_STATE] |=3D 0x04; } =20 -static void xlnx_dp_set_dpdma(Object *obj, const char *name, Object *val, +static void xlnx_dp_set_dpdma(const Object *obj, const char *name, Object = *val, Error **errp) { XlnxDPState *s =3D XLNX_DP(obj); diff --git a/hw/ipmi/ipmi.c b/hw/ipmi/ipmi.c index afafe14..b27babd 100644 --- a/hw/ipmi/ipmi.c +++ b/hw/ipmi/ipmi.c @@ -90,7 +90,7 @@ static TypeInfo ipmi_interface_type_info =3D { .class_init =3D ipmi_interface_class_init, }; =20 -static void isa_ipmi_bmc_check(Object *obj, const char *name, +static void isa_ipmi_bmc_check(const Object *obj, const char *name, Object *val, Error **errp) { IPMIBmc *bmc =3D IPMI_BMC(val); diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c index b72258e..5e23495 100644 --- a/hw/mem/pc-dimm.c +++ b/hw/mem/pc-dimm.c @@ -367,7 +367,7 @@ static void pc_dimm_get_size(Object *obj, Visitor *v, c= onst char *name, visit_type_uint64(v, name, &value, errp); } =20 -static void pc_dimm_check_memdev_is_busy(Object *obj, const char *name, +static void pc_dimm_check_memdev_is_busy(const Object *obj, const char *na= me, Object *val, Error **errp) { Error *local_err =3D NULL; diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c index 7f678d0..731f3c1 100644 --- a/hw/misc/ivshmem.c +++ b/hw/misc/ivshmem.c @@ -1009,7 +1009,7 @@ static const TypeInfo ivshmem_common_info =3D { .class_init =3D ivshmem_common_class_init, }; =20 -static void ivshmem_check_memdev_is_busy(Object *obj, const char *name, +static void ivshmem_check_memdev_is_busy(const Object *obj, const char *na= me, Object *val, Error **errp) { if (host_memory_backend_is_mapped(MEMORY_BACKEND(val))) { diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c index 0353eb6..2590893 100644 --- a/hw/virtio/virtio-crypto.c +++ b/hw/virtio/virtio-crypto.c @@ -889,7 +889,7 @@ static void virtio_crypto_class_init(ObjectClass *klass= , void *data) } =20 static void -virtio_crypto_check_cryptodev_is_used(Object *obj, const char *name, +virtio_crypto_check_cryptodev_is_used(const Object *obj, const char *name, Object *val, Error **errp) { if (cryptodev_backend_is_used(CRYPTODEV_BACKEND(val))) { diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h index 0604c33..9edded2 100644 --- a/include/hw/qdev-properties.h +++ b/include/hw/qdev-properties.h @@ -272,7 +272,8 @@ void qdev_prop_set_after_realize(DeviceState *dev, cons= t char *name, * This function should be used as the check() argument to * object_property_add_link(). */ -void qdev_prop_allow_set_link_before_realize(Object *obj, const char *name, +void qdev_prop_allow_set_link_before_realize(const Object *obj, + const char *name, Object *val, Error **errp); =20 #endif diff --git a/include/qom/object.h b/include/qom/object.h index abaeb8c..1b82899 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -764,7 +764,7 @@ ObjectClass *object_get_class(Object *obj); * * Returns: The QOM typename of @obj. */ -const char *object_get_typename(Object *obj); +const char *object_get_typename(const Object *obj); =20 /** * type_register_static: @@ -1319,7 +1319,7 @@ typedef enum { * callback function. It allows the link property to be set and never ret= urns * an error. */ -void object_property_allow_set_link(Object *, const char *, +void object_property_allow_set_link(const Object *, const char *, Object *, Error **); =20 /** @@ -1352,7 +1352,7 @@ void object_property_allow_set_link(Object *, const c= har *, */ void object_property_add_link(Object *obj, const char *name, const char *type, Object **child, - void (*check)(Object *obj, const char *name, + void (*check)(const Object *obj, const char = *name, Object *val, Error **errp), ObjectPropertyLinkFlags flags, Error **errp); diff --git a/qom/object.c b/qom/object.c index 5f6fdfa..dfdbd50 100644 --- a/qom/object.c +++ b/qom/object.c @@ -740,7 +740,7 @@ out: return ret; } =20 -const char *object_get_typename(Object *obj) +const char *object_get_typename(const Object *obj) { return obj->class->type->name; } @@ -1428,7 +1428,7 @@ out: g_free(type); } =20 -void object_property_allow_set_link(Object *obj, const char *name, +void object_property_allow_set_link(const Object *obj, const char *name, Object *val, Error **errp) { /* Allow the link to be set, always */ @@ -1436,7 +1436,7 @@ void object_property_allow_set_link(Object *obj, cons= t char *name, =20 typedef struct { Object **child; - void (*check)(Object *, const char *, Object *, Error **); + void (*check)(const Object *, const char *, Object *, Error **); ObjectPropertyLinkFlags flags; } LinkProperty; =20 @@ -1552,7 +1552,7 @@ static void object_release_link_property(Object *obj,= const char *name, =20 void object_property_add_link(Object *obj, const char *name, const char *type, Object **child, - void (*check)(Object *, const char *, + void (*check)(const Object *, const char *, Object *, Error **), ObjectPropertyLinkFlags flags, Error **errp) --=20 1.8.3.1