All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: Sergey Nizovtsev <snizovtsev@gmail.com>
Subject: [PULL 13/39] qom: fix objects with improper parent type
Date: Sat, 10 Oct 2020 03:57:13 -0400	[thread overview]
Message-ID: <20201010075739.951385-14-pbonzini@redhat.com> (raw)
In-Reply-To: <20201010075739.951385-1-pbonzini@redhat.com>

Some objects accidentally inherit ObjectClass instead of Object.
They compile silently but may crash after downcasting.

In this patch, we introduce a coccinelle script to find broken
declarations and fix them manually with proper base type.

Signed-off-by: Sergey Nizovtsev <snizovtsev@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 MAINTAINERS                              |  1 +
 include/hw/acpi/vmgenid.h                |  2 +-
 include/hw/misc/vmcoreinfo.h             |  2 +-
 include/net/can_host.h                   |  2 +-
 scripts/coccinelle/qom-parent-type.cocci | 26 ++++++++++++++++++++++++
 5 files changed, 30 insertions(+), 3 deletions(-)
 create mode 100644 scripts/coccinelle/qom-parent-type.cocci

diff --git a/MAINTAINERS b/MAINTAINERS
index 7ef459a33c..fcb2c03c2b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2462,6 +2462,7 @@ F: include/monitor/qdev.h
 F: include/qom/
 F: qapi/qom.json
 F: qapi/qdev.json
+F: scripts/coccinelle/qom-parent-type.cocci
 F: softmmu/qdev-monitor.c
 F: qom/
 F: tests/check-qom-interface.c
diff --git a/include/hw/acpi/vmgenid.h b/include/hw/acpi/vmgenid.h
index d50fbacb8e..cb4ad37fc5 100644
--- a/include/hw/acpi/vmgenid.h
+++ b/include/hw/acpi/vmgenid.h
@@ -19,7 +19,7 @@
 OBJECT_DECLARE_SIMPLE_TYPE(VmGenIdState, VMGENID)
 
 struct VmGenIdState {
-    DeviceClass parent_obj;
+    DeviceState parent_obj;
     QemuUUID guid;                /* The 128-bit GUID seen by the guest */
     uint8_t vmgenid_addr_le[8];   /* Address of the GUID (little-endian) */
 };
diff --git a/include/hw/misc/vmcoreinfo.h b/include/hw/misc/vmcoreinfo.h
index ebada6617a..0b7b55d400 100644
--- a/include/hw/misc/vmcoreinfo.h
+++ b/include/hw/misc/vmcoreinfo.h
@@ -24,7 +24,7 @@ DECLARE_INSTANCE_CHECKER(VMCoreInfoState, VMCOREINFO,
 typedef struct fw_cfg_vmcoreinfo FWCfgVMCoreInfo;
 
 struct VMCoreInfoState {
-    DeviceClass parent_obj;
+    DeviceState parent_obj;
 
     bool has_vmcoreinfo;
     FWCfgVMCoreInfo vmcoreinfo;
diff --git a/include/net/can_host.h b/include/net/can_host.h
index 4e3ce3f954..caab71bdda 100644
--- a/include/net/can_host.h
+++ b/include/net/can_host.h
@@ -35,7 +35,7 @@
 OBJECT_DECLARE_TYPE(CanHostState, CanHostClass, CAN_HOST)
 
 struct CanHostState {
-    ObjectClass oc;
+    Object oc;
 
     CanBusState *bus;
     CanBusClientState bus_client;
diff --git a/scripts/coccinelle/qom-parent-type.cocci b/scripts/coccinelle/qom-parent-type.cocci
new file mode 100644
index 0000000000..9afb3edd97
--- /dev/null
+++ b/scripts/coccinelle/qom-parent-type.cocci
@@ -0,0 +1,26 @@
+// Highlight object declarations that don't look like object class but
+// accidentally inherit from it.
+
+@match@
+identifier obj_t, fld;
+type parent_t =~ ".*Class$";
+@@
+struct obj_t {
+    parent_t fld;
+    ...
+};
+
+@script:python filter depends on match@
+obj_t << match.obj_t;
+@@
+is_class_obj = obj_t.endswith('Class')
+cocci.include_match(not is_class_obj)
+
+@replacement depends on filter@
+identifier match.obj_t, match.fld;
+type match.parent_t;
+@@
+struct obj_t {
+*   parent_t fld;
+    ...
+};
-- 
2.26.2




  parent reply	other threads:[~2020-10-10  8:08 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-10  7:57 [PULL 00/39] SCSI, qdev, qtest, meson patches for 2020-10-10 Paolo Bonzini
2020-10-10  7:57 ` [PULL 01/39] meson.build: Add comments to clarify code organization Paolo Bonzini
2020-10-10  7:57 ` [PULL 02/39] meson.build: Sort sourcesets alphabetically Paolo Bonzini
2020-10-10  7:57 ` [PULL 03/39] hw/core: Move the creation of the library to the main meson.build Paolo Bonzini
2020-10-10  7:57 ` [PULL 04/39] chardev: " Paolo Bonzini
2020-10-10  7:57 ` [PULL 05/39] migration: " Paolo Bonzini
2020-10-10  7:57 ` [PULL 06/39] io: " Paolo Bonzini
2020-10-10  7:57 ` [PULL 07/39] crypto: " Paolo Bonzini
2020-10-10  7:57 ` [PULL 08/39] authz: " Paolo Bonzini
2020-10-10  7:57 ` [PULL 09/39] qom: " Paolo Bonzini
2020-10-10  7:57 ` [PULL 10/39] hw/nvram: Always register FW_CFG_DATA_GENERATOR_INTERFACE Paolo Bonzini
2020-10-10  7:57 ` [PULL 11/39] softmmu: move more files to softmmu/ Paolo Bonzini
2020-10-10  7:57 ` [PULL 12/39] exec: split out non-softmmu-specific parts Paolo Bonzini
2020-10-10  7:57 ` Paolo Bonzini [this message]
2020-10-10  7:57 ` [PULL 14/39] configure: fix performance regression due to PIC objects Paolo Bonzini
2020-10-10  7:57 ` [PULL 15/39] docs: Move QTest documentation to its own document Paolo Bonzini
2020-10-10  7:57 ` [PULL 16/39] docs/devel/qtest: Include protocol spec in document Paolo Bonzini
2020-10-10  7:57 ` [PULL 17/39] docs/devel/qtest: Include libqtest API reference Paolo Bonzini
2020-10-10  7:57 ` [PULL 18/39] qtest: unify extra_qtest_srcs and extra_qtest_deps Paolo Bonzini
2020-10-10  7:57 ` [PULL 19/39] docs/devel: update instruction on how to add new unit tests Paolo Bonzini
2020-10-10  7:57 ` [PULL 20/39] build-sys: fix git version from -version Paolo Bonzini
2020-10-10  7:57 ` [PULL 21/39] meson.build: Re-enable KVM support for MIPS Paolo Bonzini
2020-10-10  7:57 ` [PULL 22/39] qtest: rename qtest_qmp_receive to qtest_qmp_receive_dict Paolo Bonzini
2020-10-10  7:57 ` [PULL 23/39] qtest: Reintroduce qtest_qmp_receive Paolo Bonzini
2020-10-10  7:57 ` [PULL 24/39] qtest: remove qtest_qmp_receive_success Paolo Bonzini
2020-10-10  7:57 ` [PULL 25/39] device-plug-test: use qtest_qmp to send the device_del command Paolo Bonzini
2020-10-10  7:57 ` [PULL 26/39] qtest: switch users back to qtest_qmp_receive Paolo Bonzini
2020-10-10  7:57 ` [PULL 27/39] qtest: check that drives are really appearing and disappearing Paolo Bonzini
2020-10-10  7:57 ` [PULL 28/39] qemu-iotests, qtest: rewrite test 067 as a qtest Paolo Bonzini
2020-10-10  7:57 ` [PULL 29/39] qdev: add "check if address free" callback for buses Paolo Bonzini
2020-10-10  7:57 ` [PULL 30/39] scsi/scsi_bus: switch search direction in scsi_device_find Paolo Bonzini
2020-10-10  7:57 ` [PULL 31/39] device_core: use drain_call_rcu in in qmp_device_add Paolo Bonzini
2020-10-10  7:57 ` [PULL 32/39] device-core: use RCU for list of children of a bus Paolo Bonzini
2020-10-10  7:57 ` [PULL 33/39] scsi: switch to bus->check_address Paolo Bonzini
2020-10-10  7:57 ` [PULL 34/39] device-core: use atomic_set on .realized property Paolo Bonzini
2020-10-10  7:57 ` [PULL 35/39] scsi/scsi-bus: scsi_device_find: don't return unrealized devices Paolo Bonzini
2020-10-10  7:57 ` [PULL 36/39] scsi/scsi_bus: Add scsi_device_get Paolo Bonzini
2020-10-10  7:57 ` [PULL 37/39] virtio-scsi: use scsi_device_get Paolo Bonzini
2020-10-10  7:57 ` [PULL 38/39] scsi/scsi_bus: fix races in REPORT LUNS Paolo Bonzini
2020-10-10  7:57 ` [PULL 39/39] meson: identify more sections of meson.build Paolo Bonzini
2020-10-10  8:37 ` [PULL 00/39] SCSI, qdev, qtest, meson patches for 2020-10-10 no-reply
2020-10-12 10:29 ` Peter Maydell
2020-10-12 13:42   ` Paolo Bonzini

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=20201010075739.951385-14-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=snizovtsev@gmail.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.