From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53134) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDHV3-00006h-Sl for qemu-devel@nongnu.org; Wed, 15 Jun 2016 16:33:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bDHV2-0005oa-N5 for qemu-devel@nongnu.org; Wed, 15 Jun 2016 16:33:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43564) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDHV2-0005oU-HC for qemu-devel@nongnu.org; Wed, 15 Jun 2016 16:33:20 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2123D15554 for ; Wed, 15 Jun 2016 20:33:20 +0000 (UTC) From: Eduardo Habkost Date: Wed, 15 Jun 2016 17:32:53 -0300 Message-Id: <1466022773-8965-11-git-send-email-ehabkost@redhat.com> In-Reply-To: <1466022773-8965-1-git-send-email-ehabkost@redhat.com> References: <1466022773-8965-1-git-send-email-ehabkost@redhat.com> Subject: [Qemu-devel] [PATCH 10/10] machine: Skip global registration for non-existing classes List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Markus Armbruster Cc: Paolo Bonzini , Marcel Apfelbaum , Igor Mammedov MachineClass::compat_props may point to class names that are not compiled into the QEMU binary. Skip registering those as global properties. This will allow the qdev global property code to implement stricter checks on the global property values in the future. Signed-off-by: Eduardo Habkost --- hw/core/machine.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index d6f6be4..51697cb 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -583,6 +583,7 @@ static void machine_class_finalize(ObjectClass *klass, void *data) void machine_register_compat_props(MachineState *machine) { MachineClass *mc = MACHINE_GET_CLASS(machine); + ObjectClass *oc; int i; GlobalProperty *p; @@ -592,6 +593,14 @@ void machine_register_compat_props(MachineState *machine) for (i = 0; i < mc->compat_props->len; i++) { p = g_array_index(mc->compat_props, GlobalProperty *, i); + + /* Skip registering globals for non-existing device classes */ + oc = object_class_by_name(p->driver); + oc = object_class_dynamic_cast(oc, TYPE_DEVICE); + if (!oc) { + continue; + } + /* Machine compat_props must never cause errors: */ p->errp = &error_abort; qdev_prop_register_global(p); -- 2.5.5