From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52967) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDHUr-0008Qg-WF for qemu-devel@nongnu.org; Wed, 15 Jun 2016 16:33:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bDHUq-0005kS-T7 for qemu-devel@nongnu.org; Wed, 15 Jun 2016 16:33:09 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56866) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDHUq-0005kM-Nk for qemu-devel@nongnu.org; Wed, 15 Jun 2016 16:33:08 -0400 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (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 5CAF772D02 for ; Wed, 15 Jun 2016 20:33:08 +0000 (UTC) From: Eduardo Habkost Date: Wed, 15 Jun 2016 17:32:46 -0300 Message-Id: <1466022773-8965-4-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 03/10] vl: Reject invalid class names on -global 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 Instead of just printing a warning very late, reject obviously invalid -global arguments by validating the class name. Signed-off-by: Eduardo Habkost --- hw/core/qdev-properties.c | 7 ------- vl.c | 21 ++++++++++++++++++--- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index c10edee..64e17aa 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -1052,13 +1052,6 @@ int qdev_prop_check_globals(void) continue; } oc = object_class_by_name(prop->driver); - oc = object_class_dynamic_cast(oc, TYPE_DEVICE); - if (!oc) { - error_report("Warning: global %s.%s has invalid class name", - prop->driver, prop->property); - ret = 1; - continue; - } dc = DEVICE_CLASS(oc); if (!dc->hotpluggable && !prop->used) { error_report("Warning: global %s.%s=%s not used", diff --git a/vl.c b/vl.c index d2d756a..d88ddba 100644 --- a/vl.c +++ b/vl.c @@ -2935,10 +2935,21 @@ static void set_memory_options(uint64_t *ram_slots, ram_addr_t *maxram_size, static int global_init_func(void *opaque, QemuOpts *opts, Error **errp) { GlobalProperty *g; + ObjectClass *oc; + const char *driver = qemu_opt_get(opts, "driver"); + const char *prop = qemu_opt_get(opts, "property"); + + oc = object_class_by_name(driver); + oc = object_class_dynamic_cast(oc, TYPE_DEVICE); + if (!oc) { + error_setg(errp, "global %s.%s has invalid class name", + driver, prop); + return -1; + } g = g_malloc0(sizeof(*g)); - g->driver = qemu_opt_get(opts, "driver"); - g->property = qemu_opt_get(opts, "property"); + g->driver = driver; + g->property = prop; g->value = qemu_opt_get(opts, "value"); g->user_provided = true; qdev_prop_register_global(g); @@ -4480,7 +4491,11 @@ int main(int argc, char **argv, char **envp) } } qemu_opts_foreach(qemu_find_opts("global"), - global_init_func, NULL, NULL); + global_init_func, NULL, &err); + if (err) { + error_report_err(err); + exit(1); + } /* This checkpoint is required by replay to separate prior clock reading from the other reads, because timer polling functions query -- 2.5.5