All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Andreas Färber" <afaerber@suse.de>
To: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
Cc: peter.maydell@linaro.org, qemu-devel@nongnu.org,
	Alexander Graf <agraf@suse.de>,
	Peter Crosthwaite <peter.crosthwaite@petalogix.com>,
	qemu-ppc <qemu-ppc@nongnu.org>,
	anthony@codemonkey.ws, Cornelia Huck <cornelia.huck@de.ibm.com>,
	"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
	Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH 13/16] qom: Pass available size to object_initialize()
Date: Fri, 30 Aug 2013 19:14:45 +0200	[thread overview]
Message-ID: <5220D305.8030905@suse.de> (raw)
In-Reply-To: <521B0DA0.1020808@linux.vnet.ibm.com>

Am 26.08.2013 10:11, schrieb Wenchao Xia:
> 于 2013-8-24 8:00, Andreas Färber 写道:
>> This is to avoid objects initializing beyond allocated memory.
>>
>> Inspired-by: Peter Maydell <peter.maydell@linaro.org>
>> Signed-off-by: Andreas Färber <afaerber@suse.de>
>> ---
>>   hw/core/qdev.c             |  2 +-
>>   hw/dma/xilinx_axidma.c     |  6 ++++--
>>   hw/intc/xics.c             |  2 +-
>>   hw/misc/macio/macio.c      | 13 +++++++------
>>   hw/net/xilinx_axienet.c    |  6 ++++--
>>   hw/pci-host/prep.c         |  2 +-
>>   hw/pci-host/q35.c          |  2 +-
>>   hw/pci-host/versatile.c    |  2 +-
>>   hw/s390x/s390-virtio-bus.c | 12 ++++++------
>>   hw/s390x/virtio-ccw.c      | 14 +++++++-------
>>   hw/virtio/virtio-pci.c     | 16 ++++++++--------
>>   include/qom/object.h       |  6 ++++--
>>   qom/object.c               |  9 +++++----
>>   13 files changed, 50 insertions(+), 42 deletions(-)
>>
>> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
>> index 81874da..533f6dd 100644
>> --- a/hw/core/qdev.c
>> +++ b/hw/core/qdev.c
>> @@ -473,7 +473,7 @@ static void bus_unparent(Object *obj)
>>   void qbus_create_inplace(void *bus, size_t size, const char *typename,
>>                            DeviceState *parent, const char *name)
>>   {
>> -    object_initialize(bus, typename);
>> +    object_initialize(bus, size, typename);
>>       qbus_realize(bus, parent, name);
>>   }
>>
>> diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c
>> index a48e3ba..1e6a88d 100644
>> --- a/hw/dma/xilinx_axidma.c
>> +++ b/hw/dma/xilinx_axidma.c
>> @@ -578,8 +578,10 @@ static void xilinx_axidma_init(Object *obj)
>>                                (Object **) &s->tx_control_dev, &errp);
>>       assert_no_error(errp);
>>
>> -    object_initialize(&s->rx_data_dev, TYPE_XILINX_AXI_DMA_DATA_STREAM);
>> -    object_initialize(&s->rx_control_dev,
>> TYPE_XILINX_AXI_DMA_CONTROL_STREAM);
>> +    object_initialize(&s->rx_data_dev, sizeof(s->rx_data_dev),
>> +                      TYPE_XILINX_AXI_DMA_DATA_STREAM);
>> +    object_initialize(&s->rx_control_dev, sizeof(s->rx_control_dev),
>> +                      TYPE_XILINX_AXI_DMA_CONTROL_STREAM);
>>       object_property_add_child(OBJECT(s), "axistream-connected-target",
>>                                 (Object *)&s->rx_data_dev, &errp);
>>       assert_no_error(errp);
>> diff --git a/hw/intc/xics.c b/hw/intc/xics.c
>> index 6b3c071..b96b041 100644
>> --- a/hw/intc/xics.c
>> +++ b/hw/intc/xics.c
>> @@ -650,7 +650,7 @@ static void xics_realize(DeviceState *dev, Error
>> **errp)
>>       icp->ss = g_malloc0(icp->nr_servers*sizeof(ICPState));
>>       for (i = 0; i < icp->nr_servers; i++) {
>>           char buffer[32];
>> -        object_initialize(&icp->ss[i], TYPE_ICP);
>> +        object_initialize(&icp->ss[i], sizeof(icp->ss[i]), TYPE_ICP);
>>           snprintf(buffer, sizeof(buffer), "icp[%d]", i);
>>           object_property_add_child(OBJECT(icp), buffer,
>> OBJECT(&icp->ss[i]), NULL);
>>           qdev_init_nofail(DEVICE(&icp->ss[i]));
>> diff --git a/hw/misc/macio/macio.c b/hw/misc/macio/macio.c
>> index c0d0bf7..1bee3d8 100644
>> --- a/hw/misc/macio/macio.c
>> +++ b/hw/misc/macio/macio.c
>> @@ -202,11 +202,12 @@ static int macio_oldworld_initfn(PCIDevice *d)
>>       return 0;
>>   }
>>
>> -static void macio_init_ide(MacIOState *s, MACIOIDEState *ide, int index)
>> +static void macio_init_ide(MacIOState *s, MACIOIDEState *ide, size_t
>> ide_size,
>> +                           int index)
>>   {
>>       gchar *name;
>>
>> -    object_initialize(ide, TYPE_MACIO_IDE);
>> +    object_initialize(ide, ide_size, TYPE_MACIO_IDE);
>>       qdev_set_parent_bus(DEVICE(ide), sysbus_get_default());
>>       memory_region_add_subregion(&s->bar, 0x1f000 + ((index + 1) *
>> 0x1000),
>>                                   &ide->mem);
>> @@ -224,13 +225,13 @@ static void macio_oldworld_init(Object *obj)
>>
>>       qdev_init_gpio_out(DEVICE(obj), os->irqs, ARRAY_SIZE(os->irqs));
>>
>> -    object_initialize(&os->nvram, TYPE_MACIO_NVRAM);
>> +    object_initialize(&os->nvram, sizeof(os->nvram), TYPE_MACIO_NVRAM);
>>       dev = DEVICE(&os->nvram);
>>       qdev_prop_set_uint32(dev, "size", 0x2000);
>>       qdev_prop_set_uint32(dev, "it_shift", 4);
>>
>>       for (i = 0; i < 2; i++) {
>> -        macio_init_ide(s, &os->ide[i], i);
>> +        macio_init_ide(s, &os->ide[i], sizeof(os->ide[i]), i);
>>       }
>>   }
>>
>> @@ -310,7 +311,7 @@ static void macio_newworld_init(Object *obj)
>>       qdev_init_gpio_out(DEVICE(obj), ns->irqs, ARRAY_SIZE(ns->irqs));
>>
>>       for (i = 0; i < 2; i++) {
>> -        macio_init_ide(s, &ns->ide[i], i);
>> +        macio_init_ide(s, &ns->ide[i], sizeof(ns->ide[i]), i);
>>       }
>>   }
>>
>> @@ -321,7 +322,7 @@ static void macio_instance_init(Object *obj)
>>
>>       memory_region_init(&s->bar, NULL, "macio", 0x80000);
>>
>> -    object_initialize(&s->cuda, TYPE_CUDA);
>> +    object_initialize(&s->cuda, sizeof(s->cuda), TYPE_CUDA);
>>       qdev_set_parent_bus(DEVICE(&s->cuda), sysbus_get_default());
>>       object_property_add_child(obj, "cuda", OBJECT(&s->cuda), NULL);
>>
>> diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c
>> index f173429..3eb7715 100644
>> --- a/hw/net/xilinx_axienet.c
>> +++ b/hw/net/xilinx_axienet.c
>> @@ -990,8 +990,10 @@ static void xilinx_enet_init(Object *obj)
>>                                (Object **) &s->tx_control_dev, &errp);
>>       assert_no_error(errp);
>>
>> -    object_initialize(&s->rx_data_dev,
>> TYPE_XILINX_AXI_ENET_DATA_STREAM);
>> -    object_initialize(&s->rx_control_dev,
>> TYPE_XILINX_AXI_ENET_CONTROL_STREAM);
>> +    object_initialize(&s->rx_data_dev, sizeof(s->rx_data_dev),
>> +                      TYPE_XILINX_AXI_ENET_DATA_STREAM);
>> +    object_initialize(&s->rx_control_dev, sizeof(s->rx_control_dev),
>> +                      TYPE_XILINX_AXI_ENET_CONTROL_STREAM);
>>       object_property_add_child(OBJECT(s), "axistream-connected-target",
>>                                 (Object *)&s->rx_data_dev, &errp);
>>       assert_no_error(errp);
>> diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c
>> index a62236b..0e71fdb 100644
>> --- a/hw/pci-host/prep.c
>> +++ b/hw/pci-host/prep.c
>> @@ -159,7 +159,7 @@ static void raven_pcihost_initfn(Object *obj)
>>                           address_space_mem, address_space_io, 0,
>> TYPE_PCI_BUS);
>>       h->bus = &s->pci_bus;
>>
>> -    object_initialize(&s->pci_dev, TYPE_RAVEN_PCI_DEVICE);
>> +    object_initialize(&s->pci_dev, sizeof(s->pci_dev),
>> TYPE_RAVEN_PCI_DEVICE);
>>       pci_dev = DEVICE(&s->pci_dev);
>>       qdev_set_parent_bus(pci_dev, BUS(&s->pci_bus));
>>       object_property_set_int(OBJECT(&s->pci_dev), PCI_DEVFN(0, 0),
>> "addr",
>> diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c
>> index 12314d8..e7d9712 100644
>> --- a/hw/pci-host/q35.c
>> +++ b/hw/pci-host/q35.c
>> @@ -133,7 +133,7 @@ static void q35_host_initfn(Object *obj)
>>       memory_region_init_io(&phb->data_mem, obj,
>> &pci_host_data_le_ops, phb,
>>                             "pci-conf-data", 4);
>>
>> -    object_initialize(&s->mch, TYPE_MCH_PCI_DEVICE);
>> +    object_initialize(&s->mch, sizeof(s->mch), TYPE_MCH_PCI_DEVICE);
>>       object_property_add_child(OBJECT(s), "mch", OBJECT(&s->mch), NULL);
>>       qdev_prop_set_uint32(DEVICE(&s->mch), "addr", PCI_DEVFN(0, 0));
>>       qdev_prop_set_bit(DEVICE(&s->mch), "multifunction", false);
>> diff --git a/hw/pci-host/versatile.c b/hw/pci-host/versatile.c
>> index 4b9359c..6b28929 100644
>> --- a/hw/pci-host/versatile.c
>> +++ b/hw/pci-host/versatile.c
>> @@ -389,7 +389,7 @@ static void pci_vpb_init(Object *obj)
>>                           PCI_DEVFN(11, 0), TYPE_PCI_BUS);
>>       h->bus = &s->pci_bus;
>>
>> -    object_initialize(&s->pci_dev, TYPE_VERSATILE_PCI_HOST);
>> +    object_initialize(&s->pci_dev, sizeof(s->pci_dev),
>> TYPE_VERSATILE_PCI_HOST);
>>       qdev_set_parent_bus(DEVICE(&s->pci_dev), BUS(&s->pci_bus));
>>
>>       /* Window sizes for VersatilePB; realview_pci's init will
>> override */
>> diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
>> index e95b831..9cb8b91 100644
>> --- a/hw/s390x/s390-virtio-bus.c
>> +++ b/hw/s390x/s390-virtio-bus.c
>> @@ -171,7 +171,7 @@ static int s390_virtio_net_init(VirtIOS390Device
>> *s390_dev)
>>   static void s390_virtio_net_instance_init(Object *obj)
>>   {
>>       VirtIONetS390 *dev = VIRTIO_NET_S390(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_NET);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -190,7 +190,7 @@ static int s390_virtio_blk_init(VirtIOS390Device
>> *s390_dev)
>>   static void s390_virtio_blk_instance_init(Object *obj)
>>   {
>>       VirtIOBlkS390 *dev = VIRTIO_BLK_S390(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_BLK);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_BLK);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -231,7 +231,7 @@ static int
>> s390_virtio_serial_init(VirtIOS390Device *s390_dev)
>>   static void s390_virtio_serial_instance_init(Object *obj)
>>   {
>>       VirtIOSerialS390 *dev = VIRTIO_SERIAL_S390(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_SERIAL);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev),
>> TYPE_VIRTIO_SERIAL);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -263,7 +263,7 @@ static int s390_virtio_scsi_init(VirtIOS390Device
>> *s390_dev)
>>   static void s390_virtio_scsi_instance_init(Object *obj)
>>   {
>>       VirtIOSCSIS390 *dev = VIRTIO_SCSI_S390(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_SCSI);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SCSI);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -284,7 +284,7 @@ static int s390_vhost_scsi_init(VirtIOS390Device
>> *s390_dev)
>>   static void s390_vhost_scsi_instance_init(Object *obj)
>>   {
>>       VHostSCSIS390 *dev = VHOST_SCSI_S390(obj);
>> -    object_initialize(&dev->vdev, TYPE_VHOST_SCSI);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VHOST_SCSI);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>   #endif
>> @@ -310,7 +310,7 @@ static int s390_virtio_rng_init(VirtIOS390Device
>> *s390_dev)
>>   static void s390_virtio_rng_instance_init(Object *obj)
>>   {
>>       VirtIORNGS390 *dev = VIRTIO_RNG_S390(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_RNG);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_RNG);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>       object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
>>                                (Object **)&dev->vdev.conf.rng, NULL);
>> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
>> index cf7075e..ea57b3e 100644
>> --- a/hw/s390x/virtio-ccw.c
>> +++ b/hw/s390x/virtio-ccw.c
>> @@ -660,7 +660,7 @@ static int virtio_ccw_net_init(VirtioCcwDevice
>> *ccw_dev)
>>   static void virtio_ccw_net_instance_init(Object *obj)
>>   {
>>       VirtIONetCcw *dev = VIRTIO_NET_CCW(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_NET);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -680,7 +680,7 @@ static int virtio_ccw_blk_init(VirtioCcwDevice
>> *ccw_dev)
>>   static void virtio_ccw_blk_instance_init(Object *obj)
>>   {
>>       VirtIOBlkCcw *dev = VIRTIO_BLK_CCW(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_BLK);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_BLK);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -713,7 +713,7 @@ static int virtio_ccw_serial_init(VirtioCcwDevice
>> *ccw_dev)
>>   static void virtio_ccw_serial_instance_init(Object *obj)
>>   {
>>       VirtioSerialCcw *dev = VIRTIO_SERIAL_CCW(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_SERIAL);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev),
>> TYPE_VIRTIO_SERIAL);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -759,7 +759,7 @@ static void
>> balloon_ccw_stats_set_poll_interval(Object *obj, struct Visitor *v,
>>   static void virtio_ccw_balloon_instance_init(Object *obj)
>>   {
>>       VirtIOBalloonCcw *dev = VIRTIO_BALLOON_CCW(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_BALLOON);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev),
>> TYPE_VIRTIO_BALLOON);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>
>>       object_property_add(obj, "guest-stats", "guest statistics",
>> @@ -799,7 +799,7 @@ static int virtio_ccw_scsi_init(VirtioCcwDevice
>> *ccw_dev)
>>   static void virtio_ccw_scsi_instance_init(Object *obj)
>>   {
>>       VirtIOSCSICcw *dev = VIRTIO_SCSI_CCW(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_SCSI);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SCSI);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -820,7 +820,7 @@ static int vhost_ccw_scsi_init(VirtioCcwDevice
>> *ccw_dev)
>>   static void vhost_ccw_scsi_instance_init(Object *obj)
>>   {
>>       VHostSCSICcw *dev = VHOST_SCSI_CCW(obj);
>> -    object_initialize(&dev->vdev, TYPE_VHOST_SCSI);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VHOST_SCSI);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>   #endif
>> @@ -1171,7 +1171,7 @@ static const TypeInfo vhost_ccw_scsi = {
>>   static void virtio_ccw_rng_instance_init(Object *obj)
>>   {
>>       VirtIORNGCcw *dev = VIRTIO_RNG_CCW(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_RNG);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_RNG);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>       object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
>>                                (Object **)&dev->vdev.conf.rng, NULL);
>> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
>> index a9a1893..811adb3 100644
>> --- a/hw/virtio/virtio-pci.c
>> +++ b/hw/virtio/virtio-pci.c
>> @@ -919,7 +919,7 @@ static void virtio_9p_pci_class_init(ObjectClass
>> *klass, void *data)
>>   static void virtio_9p_pci_instance_init(Object *obj)
>>   {
>>       V9fsPCIState *dev = VIRTIO_9P_PCI(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_9P);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_9P);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -1079,7 +1079,7 @@ static void
>> virtio_blk_pci_class_init(ObjectClass *klass, void *data)
>>   static void virtio_blk_pci_instance_init(Object *obj)
>>   {
>>       VirtIOBlkPCI *dev = VIRTIO_BLK_PCI(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_BLK);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_BLK);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -1149,7 +1149,7 @@ static void
>> virtio_scsi_pci_class_init(ObjectClass *klass, void *data)
>>   static void virtio_scsi_pci_instance_init(Object *obj)
>>   {
>>       VirtIOSCSIPCI *dev = VIRTIO_SCSI_PCI(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_SCSI);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SCSI);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -1206,7 +1206,7 @@ static void
>> vhost_scsi_pci_class_init(ObjectClass *klass, void *data)
>>   static void vhost_scsi_pci_instance_init(Object *obj)
>>   {
>>       VHostSCSIPCI *dev = VHOST_SCSI_PCI(obj);
>> -    object_initialize(&dev->vdev, TYPE_VHOST_SCSI);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VHOST_SCSI);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -1287,7 +1287,7 @@ static void
>> virtio_balloon_pci_class_init(ObjectClass *klass, void *data)
>>   static void virtio_balloon_pci_instance_init(Object *obj)
>>   {
>>       VirtIOBalloonPCI *dev = VIRTIO_BALLOON_PCI(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_BALLOON);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev),
>> TYPE_VIRTIO_BALLOON);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>
>>       object_property_add(obj, "guest-stats", "guest statistics",
>> @@ -1373,7 +1373,7 @@ static void
>> virtio_serial_pci_class_init(ObjectClass *klass, void *data)
>>   static void virtio_serial_pci_instance_init(Object *obj)
>>   {
>>       VirtIOSerialPCI *dev = VIRTIO_SERIAL_PCI(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_SERIAL);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev),
>> TYPE_VIRTIO_SERIAL);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -1432,7 +1432,7 @@ static void
>> virtio_net_pci_class_init(ObjectClass *klass, void *data)
>>   static void virtio_net_pci_instance_init(Object *obj)
>>   {
>>       VirtIONetPCI *dev = VIRTIO_NET_PCI(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_NET);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>   }
>>
>> @@ -1488,7 +1488,7 @@ static void
>> virtio_rng_pci_class_init(ObjectClass *klass, void *data)
>>   static void virtio_rng_initfn(Object *obj)
>>   {
>>       VirtIORngPCI *dev = VIRTIO_RNG_PCI(obj);
>> -    object_initialize(&dev->vdev, TYPE_VIRTIO_RNG);
>> +    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_RNG);
>>       object_property_add_child(obj, "virtio-backend",
>> OBJECT(&dev->vdev), NULL);
>>       object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
>>                                (Object **)&dev->vdev.conf.rng, NULL);
>> diff --git a/include/qom/object.h b/include/qom/object.h
>> index c463ced..1a7b71a 100644
>> --- a/include/qom/object.h
>> +++ b/include/qom/object.h
>> @@ -586,24 +586,26 @@ Object *object_new_with_type(Type type);
>>   /**
>>    * object_initialize_with_type:
>>    * @data: A pointer to the memory to be used for the object.
>> + * @size: The maximum size available at @data for the object.
>>    * @type: The type of the object to instantiate.
>>    *
>>    * This function will initialize an object.  The memory for the
>> object should
>>    * have already been allocated.  The returned object has a reference
>> count of 1,
>>    * and will be finalized when the last reference is dropped.
>>    */
>> -void object_initialize_with_type(void *data, Type type);
>> +void object_initialize_with_type(void *data, size_t size, Type type);
>>
>>   /**
>>    * object_initialize:
>>    * @obj: A pointer to the memory to be used for the object.
>> + * @size: The maximum size available at @obj for the object.
>>    * @typename: The name of the type of the object to instantiate.
>>    *
>>    * This function will initialize an object.  The memory for the
>> object should
>>    * have already been allocated.  The returned object has a reference
>> count of 1,
>>    * and will be finalized when the last reference is dropped.
>>    */
>> -void object_initialize(void *obj, const char *typename);
>> +void object_initialize(void *obj, size_t size, const char *typename);
>>
>>   /**
>>    * object_dynamic_cast:
>> diff --git a/qom/object.c b/qom/object.c
>> index 74fd241..e90e382 100644
>> --- a/qom/object.c
>> +++ b/qom/object.c
>> @@ -311,7 +311,7 @@ static void object_post_init_with_type(Object
>> *obj, TypeImpl *ti)
>>       }
>>   }
>>
>> -void object_initialize_with_type(void *data, TypeImpl *type)
>> +void object_initialize_with_type(void *data, size_t size, TypeImpl
>> *type)
>>   {
>>       Object *obj = data;
>>
>> @@ -320,6 +320,7 @@ void object_initialize_with_type(void *data,
>> TypeImpl *type)
>>
>>       g_assert(type->instance_size >= sizeof(Object));
>>       g_assert(type->abstract == false);
>> +    g_assert(size >= type->instance_size);
>   I paid some time to find this line for several times, so if it can be
> splitted as a separate patch as "qom: assert object init size", it will
> make review easier.

That's a good idea, it also allows me to properly credit Peter via
Suggested-by on the actual assertion patch. Done.

Thanks for your review!

Regards,
Andreas

> 
>>
>>       memset(obj, 0, type->instance_size);
>>       obj->class = type->class;
>> @@ -329,11 +330,11 @@ void object_initialize_with_type(void *data,
>> TypeImpl *type)
>>       object_post_init_with_type(obj, type);
>>   }
>>
>> -void object_initialize(void *data, const char *typename)
>> +void object_initialize(void *data, size_t size, const char *typename)
>>   {
>>       TypeImpl *type = type_get_by_name(typename);
>>
>> -    object_initialize_with_type(data, type);
>> +    object_initialize_with_type(data, size, type);
>>   }
>>
>>   static inline bool object_property_is_child(ObjectProperty *prop)
>> @@ -424,7 +425,7 @@ Object *object_new_with_type(Type type)
>>       type_initialize(type);
>>
>>       obj = g_malloc(type->instance_size);
>> -    object_initialize_with_type(obj, type);
>> +    object_initialize_with_type(obj, type->instance_size, type);
>>       obj->free = g_free;
>>
>>       return obj;
>>
> 
> 


-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

  reply	other threads:[~2013-08-30 17:15 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-24  0:00 [Qemu-devel] [PATCH 00/16] qom: Assert sufficient object instance size Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 01/16] qom: Fix object_initialize_with_type() argument name in documentation Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 02/16] intel-hda: Pass size to hda_codec_bus_init() Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 03/16] ipack: Pass size to ipack_bus_new_inplace() Andreas Färber
2013-08-26  7:23   ` Wenchao Xia
2013-08-24  0:00 ` [Qemu-devel] [PATCH 04/16] ide: Pass size to ide_bus_new() Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 05/16] pci: Pass size to pci_bus_new_inplace() Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 06/16] scsi: Pass size to scsi_bus_new() Andreas Färber
2013-08-26  8:01   ` Paolo Bonzini
2013-08-24  0:00 ` [Qemu-devel] [PATCH 07/16] usb: Pass size to usb_bus_new() Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 08/16] virtio-pci: Pass size to virtio_pci_bus_new() Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 09/16] s390-virtio-bus: Pass size to virtio_s390_bus_new() Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 10/16] virtio-ccw: Pass size to virtio_ccw_bus_new() Andreas Färber
2013-08-26  8:00   ` Cornelia Huck
2013-08-24  0:00 ` [Qemu-devel] [PATCH 11/16] virtio-mmio: Pass size to virtio_mmio_bus_new() Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 12/16] qdev: Pass size to qbus_create_inplace() Andreas Färber
2013-08-26  7:44   ` Wenchao Xia
2013-08-30 17:12     ` Andreas Färber
2013-08-26  8:03   ` Cornelia Huck
2013-08-30 17:05     ` Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 13/16] qom: Pass available size to object_initialize() Andreas Färber
2013-08-26  8:09   ` Cornelia Huck
2013-08-26  8:11   ` Wenchao Xia
2013-08-30 17:14     ` Andreas Färber [this message]
2013-08-24  0:00 ` [Qemu-devel] [PATCH 14/16] qom: Introduce type_get_instance_size() Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 15/16] qdev-monitor: Clean up qdev_device_add() variable naming Andreas Färber
2013-08-26  7:52   ` Wenchao Xia
2013-08-30 17:19     ` Andreas Färber
2013-09-12 14:40       ` Andreas Färber
2013-08-24  0:00 ` [Qemu-devel] [PATCH 16/16] qdev-monitor: Avoid aborting on out-of-memory in qdev_device_add() Andreas Färber
2013-08-26  8:12 ` [Qemu-devel] [PATCH 00/16] qom: Assert sufficient object instance size Wenchao Xia
2013-08-30 19:37 ` Andreas Färber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5220D305.8030905@suse.de \
    --to=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=anthony@codemonkey.ws \
    --cc=cornelia.huck@de.ibm.com \
    --cc=edgar.iglesias@gmail.com \
    --cc=peter.crosthwaite@petalogix.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=xiawenc@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.