[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 01/20] qom: enforce readonly nature of link's che
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH v4 01/20] qom: enforce readonly nature of link's check callback |
Date: |
Fri, 14 Jul 2017 10:14:50 +0800 |
From: Igor Mammedov <address@hidden>
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 <address@hidden>
Signed-off-by: Fam Zheng <address@hidden>
---
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,
}
}
-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 = 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,
uint32_t value)
s->core_registers[DP_INTERRUPT_SIGNAL_STATE] |= 0x04;
}
-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 = 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 = {
.class_init = ipmi_interface_class_init,
};
-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 = 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, const
char *name,
visit_type_uint64(v, name, &value, errp);
}
-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 *name,
Object *val, Error **errp)
{
Error *local_err = NULL;
diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
index 2f0819d..97beaf6 100644
--- a/hw/misc/ivshmem.c
+++ b/hw/misc/ivshmem.c
@@ -1009,7 +1009,7 @@ static const TypeInfo ivshmem_common_info = {
.class_init = ivshmem_common_class_init,
};
-static void ivshmem_check_memdev_is_busy(Object *obj, const char *name,
+static void ivshmem_check_memdev_is_busy(const Object *obj, const char *name,
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)
}
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, const
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);
#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);
/**
* type_register_static:
@@ -1319,7 +1319,7 @@ typedef enum {
* callback function. It allows the link property to be set and never returns
* an error.
*/
-void object_property_allow_set_link(Object *, const char *,
+void object_property_allow_set_link(const Object *, const char *,
Object *, Error **);
/**
@@ -1352,7 +1352,7 @@ void object_property_allow_set_link(Object *, const char
*,
*/
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;
}
-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);
}
-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, const
char *name,
typedef struct {
Object **child;
- void (*check)(Object *, const char *, Object *, Error **);
+ void (*check)(const Object *, const char *, Object *, Error **);
ObjectPropertyLinkFlags flags;
} LinkProperty;
@@ -1552,7 +1552,7 @@ static void object_release_link_property(Object *obj,
const char *name,
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)
--
2.9.4
- [Qemu-devel] [PATCH v4 00/20] qdev: Introduce DEFINE_PROP_LINK, Fam Zheng, 2017/07/13
- [Qemu-devel] [PATCH v4 01/20] qom: enforce readonly nature of link's check callback,
Fam Zheng <=
- [Qemu-devel] [PATCH v4 03/20] qdev: Introduce DEFINE_PROP_LINK, Fam Zheng, 2017/07/13
- [Qemu-devel] [PATCH v4 02/20] qdev: Introduce PropertyInfo.create, Fam Zheng, 2017/07/13
- [Qemu-devel] [PATCH v4 04/20] qmp: Use ObjectProperty.type if present, Fam Zheng, 2017/07/13
- [Qemu-devel] [PATCH v4 05/20] qdev: Add const qualifier to PropertyInfo definitions, Fam Zheng, 2017/07/13
- [Qemu-devel] [PATCH v4 06/20] virtio-blk: Convert to DEFINE_PROP_LINK, Fam Zheng, 2017/07/13
- [Qemu-devel] [PATCH v4 07/20] virtio-scsi: Convert to DEFINE_PROP_LINK, Fam Zheng, 2017/07/13
- [Qemu-devel] [PATCH v4 08/20] virtio-rng: Convert to DEFINE_PROP_LINK, Fam Zheng, 2017/07/13
- [Qemu-devel] [PATCH v4 09/20] virtio-crypto: Convert to DEFINE_PROP_LINK, Fam Zheng, 2017/07/13
- [Qemu-devel] [PATCH v4 10/20] dimm: Convert to DEFINE_PROP_LINK, Fam Zheng, 2017/07/13
- [Qemu-devel] [PATCH v4 11/20] ivshmem: Convert to DEFINE_PROP_LINK, Fam Zheng, 2017/07/13