From nobody Fri May 10 02:56:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1710250897; cv=none; d=zohomail.com; s=zohoarc; b=Why0sqxz/DornL8favmn3fZ7WvsGnNIN3/3ulFHPr3SBzfYV6Wg4Mi1u17Nhl38dOe/0RixKjpi+1QKjQ5DnuzLWsZkX3XLAN4fS2y25AA//yg7K2rnca4swNGZ1u8IHwMyEWNf9Nj8lo148lwzZsjcTaogtE3KAmJ+27K9iCAU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1710250897; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fEmswaUF1owobkiWaoqEG6wgMImQAM2gWU5NL9z4vIk=; b=AKG36i+o1faXSZJgisy2K1pfIYh9mnK0b7zUT2QflsCy/jZVgyG7fAWww/WJp2lIPU37II34Ee4AU9I/WusMOJCNYv2dp3q2tTqTzDHqlZzYYixxtM7m30xHs96BqUaeJd5qAQJSycUXucY7dyff/FHW/z+p4sBXd160JoezULw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1710250897312500.6733364257591; Tue, 12 Mar 2024 06:41:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rk2Nj-0007Io-NT; Tue, 12 Mar 2024 09:41:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rk2NX-0007DS-P2 for qemu-devel@nongnu.org; Tue, 12 Mar 2024 09:41:16 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rk2NV-0003cK-2o for qemu-devel@nongnu.org; Tue, 12 Mar 2024 09:41:15 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-531-magB92k-NjqToIztyLvIgQ-1; Tue, 12 Mar 2024 09:41:10 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 51B8084B0C0; Tue, 12 Mar 2024 13:41:10 +0000 (UTC) Received: from blackfin.pond.sub.org (unknown [10.39.192.138]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0D44AC04123; Tue, 12 Mar 2024 13:41:10 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id DC98A21E6A28; Tue, 12 Mar 2024 14:41:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1710250872; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fEmswaUF1owobkiWaoqEG6wgMImQAM2gWU5NL9z4vIk=; b=F2PETUSeOAnq1s8JYziEzHqnKo/gniO62gNKBY9p4clTk3CzqVXjoau8TXNsS99KNgIHDz k+YH2+qUhALTqCwQQ1MHwjz7Qkwd8gyUBGZsG0paVtlxR2eEFI15e6euXNxaqYAq7yLBQo n0y84YVIixTeReFiG/1lfsWHPg2g5Xc= X-MC-Unique: magB92k-NjqToIztyLvIgQ-1 From: Markus Armbruster To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, Daniel Henrique Barboza Subject: [PULL 1/4] target: Simplify type checks for CpuModelInfo member @props Date: Tue, 12 Mar 2024 14:41:05 +0100 Message-ID: <20240312134108.3030801-2-armbru@redhat.com> In-Reply-To: <20240312134108.3030801-1-armbru@redhat.com> References: <20240312134108.3030801-1-armbru@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armbru@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.687, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1710250898311100003 Content-Type: text/plain; charset="utf-8" CpuModelInfo member @props is semantically a mapping from name to value, and syntactically a JSON object on the wire. This translates to QDict in C. Since the QAPI schema language lacks the means to express 'object', we use 'any' instead. This is QObject in C. Commands taking a CpuModelInfo argument need to check the QObject is a QDict. For arm, riscv, and s390x, the code checks right before passing the QObject to visit_start_struct(). visit_start_struct() then checks again. Delete the first check. The error message for @props that are not an object changes slightly to the the message we get for this kind of type error in other contexts. Minor improvement. Additionally, error messages about members of @props now refer to 'props.prop-name' instead of just 'prop-name'. Another minor improvement. Both changes are visible in tests/qtest/arm-cpu-features.c. Signed-off-by: Markus Armbruster Message-ID: <20240305145919.2186971-2-armbru@redhat.com> Acked-by: Daniel Henrique Barboza [Drop #include now superfluous] --- target/arm/arm-qmp-cmds.c | 16 ++++------------ target/riscv/riscv-qmp-cmds.c | 20 +++++--------------- target/s390x/cpu_models_sysemu.c | 16 ++++------------ tests/qtest/arm-cpu-features.c | 12 ++++++------ 4 files changed, 19 insertions(+), 45 deletions(-) diff --git a/target/arm/arm-qmp-cmds.c b/target/arm/arm-qmp-cmds.c index 2250cd7ddf..f85576f13e 100644 --- a/target/arm/arm-qmp-cmds.c +++ b/target/arm/arm-qmp-cmds.c @@ -28,7 +28,6 @@ #include "qapi/qobject-input-visitor.h" #include "qapi/qapi-commands-machine-target.h" #include "qapi/qapi-commands-misc-target.h" -#include "qapi/qmp/qerror.h" #include "qapi/qmp/qdict.h" #include "qom/qom-qobject.h" =20 @@ -104,7 +103,7 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(Cp= uModelExpansionType type, Error **errp) { CpuModelExpansionInfo *expansion_info; - const QDict *qdict_in =3D NULL; + const QDict *qdict_in; QDict *qdict_out; ObjectClass *oc; Object *obj; @@ -151,27 +150,20 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(= CpuModelExpansionType type, } } =20 - if (model->props) { - qdict_in =3D qobject_to(QDict, model->props); - if (!qdict_in) { - error_setg(errp, QERR_INVALID_PARAMETER_TYPE, "props", "dict"); - return NULL; - } - } - obj =3D object_new(object_class_get_name(oc)); =20 - if (qdict_in) { + if (model->props) { Visitor *visitor; Error *err =3D NULL; =20 visitor =3D qobject_input_visitor_new(model->props); - if (!visit_start_struct(visitor, NULL, NULL, 0, errp)) { + if (!visit_start_struct(visitor, "props", NULL, 0, errp)) { visit_free(visitor); object_unref(obj); return NULL; } =20 + qdict_in =3D qobject_to(QDict, model->props); i =3D 0; while ((name =3D cpu_model_advertised_features[i++]) !=3D NULL) { if (qdict_get(qdict_in, name)) { diff --git a/target/riscv/riscv-qmp-cmds.c b/target/riscv/riscv-qmp-cmds.c index c48b9cfa67..d0360c0528 100644 --- a/target/riscv/riscv-qmp-cmds.c +++ b/target/riscv/riscv-qmp-cmds.c @@ -28,7 +28,6 @@ #include "qapi/qapi-commands-machine-target.h" #include "qapi/qmp/qbool.h" #include "qapi/qmp/qdict.h" -#include "qapi/qmp/qerror.h" #include "qapi/qobject-input-visitor.h" #include "qapi/visitor.h" #include "qom/qom-qobject.h" @@ -129,18 +128,19 @@ static void riscv_obj_add_profiles_qdict(Object *obj,= QDict *qdict_out) } =20 static void riscv_cpuobj_validate_qdict_in(Object *obj, QObject *props, - const QDict *qdict_in, Error **errp) { + const QDict *qdict_in; const QDictEntry *qe; Visitor *visitor; Error *local_err =3D NULL; =20 visitor =3D qobject_input_visitor_new(props); - if (!visit_start_struct(visitor, NULL, NULL, 0, &local_err)) { + if (!visit_start_struct(visitor, "props", NULL, 0, &local_err)) { goto err; } =20 + qdict_in =3D qobject_to(QDict, props); for (qe =3D qdict_first(qdict_in); qe; qe =3D qdict_next(qdict_in, qe)= ) { object_property_find_err(obj, qe->key, &local_err); if (local_err) { @@ -170,7 +170,6 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(Cp= uModelExpansionType type, Error **errp) { CpuModelExpansionInfo *expansion_info; - const QDict *qdict_in =3D NULL; QDict *qdict_out; ObjectClass *oc; Object *obj; @@ -188,14 +187,6 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(C= puModelExpansionType type, return NULL; } =20 - if (model->props) { - qdict_in =3D qobject_to(QDict, model->props); - if (!qdict_in) { - error_setg(errp, QERR_INVALID_PARAMETER_TYPE, "props", "dict"); - return NULL; - } - } - obj =3D object_new(object_class_get_name(oc)); =20 riscv_check_if_cpu_available(RISCV_CPU(obj), &local_err); @@ -205,9 +196,8 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(Cp= uModelExpansionType type, return NULL; } =20 - if (qdict_in) { - riscv_cpuobj_validate_qdict_in(obj, model->props, qdict_in, - &local_err); + if (model->props) { + riscv_cpuobj_validate_qdict_in(obj, model->props, &local_err); if (local_err) { error_propagate(errp, local_err); object_unref(obj); diff --git a/target/s390x/cpu_models_sysemu.c b/target/s390x/cpu_models_sys= emu.c index 63981bf36b..53bce8adb2 100644 --- a/target/s390x/cpu_models_sysemu.c +++ b/target/s390x/cpu_models_sysemu.c @@ -17,7 +17,6 @@ #include "sysemu/kvm.h" #include "qapi/error.h" #include "qapi/visitor.h" -#include "qapi/qmp/qerror.h" #include "qapi/qobject-input-visitor.h" #include "qapi/qmp/qdict.h" #include "qapi/qapi-commands-machine-target.h" @@ -101,21 +100,13 @@ static void cpu_model_from_info(S390CPUModel *model, = const CpuModelInfo *info, Error **errp) { Error *err =3D NULL; - const QDict *qdict =3D NULL; + const QDict *qdict; const QDictEntry *e; Visitor *visitor; ObjectClass *oc; S390CPU *cpu; Object *obj; =20 - if (info->props) { - qdict =3D qobject_to(QDict, info->props); - if (!qdict) { - error_setg(errp, QERR_INVALID_PARAMETER_TYPE, "props", "dict"); - return; - } - } - oc =3D cpu_class_by_name(TYPE_S390_CPU, info->name); if (!oc) { error_setg(errp, "The CPU definition \'%s\' is unknown.", info->na= me); @@ -135,13 +126,14 @@ static void cpu_model_from_info(S390CPUModel *model, = const CpuModelInfo *info, return; } =20 - if (qdict) { + if (info->props) { visitor =3D qobject_input_visitor_new(info->props); - if (!visit_start_struct(visitor, NULL, NULL, 0, errp)) { + if (!visit_start_struct(visitor, "props", NULL, 0, errp)) { visit_free(visitor); object_unref(obj); return; } + qdict =3D qobject_to(QDict, info->props); for (e =3D qdict_first(qdict); e; e =3D qdict_next(qdict, e)) { if (!object_property_set(obj, e->key, visitor, &err)) { break; diff --git a/tests/qtest/arm-cpu-features.c b/tests/qtest/arm-cpu-features.c index a8a4c668ad..1daceb2e31 100644 --- a/tests/qtest/arm-cpu-features.c +++ b/tests/qtest/arm-cpu-features.c @@ -79,7 +79,7 @@ static const char *resp_get_error(QDict *resp) g_assert(_resp); \ _error =3D resp_get_error(_resp); \ g_assert(_error); \ - g_assert(g_str_equal(_error, expected_error)); \ + g_assert_cmpstr(_error, =3D=3D, expected_error); = \ qobject_unref(_resp); \ }) =20 @@ -194,8 +194,8 @@ static void assert_type_full(QTestState *qts) g_assert(resp); error =3D resp_get_error(resp); g_assert(error); - g_assert(g_str_equal(error, - "The requested expansion type is not supported")); + g_assert_cmpstr(error, =3D=3D, + "The requested expansion type is not supported"); qobject_unref(resp); } =20 @@ -212,8 +212,8 @@ static void assert_bad_props(QTestState *qts, const cha= r *cpu_type) g_assert(resp); error =3D resp_get_error(resp); g_assert(error); - g_assert(g_str_equal(error, - "Invalid parameter type for 'props', expected: di= ct")); + g_assert_cmpstr(error, =3D=3D, + "Invalid parameter type for 'props', expected: object"= ); qobject_unref(resp); } =20 @@ -446,7 +446,7 @@ static void test_query_cpu_model_expansion(const void *= data) assert_bad_props(qts, "max"); assert_error(qts, "foo", "The CPU type 'foo' is not a recognized " "ARM CPU type", NULL); - assert_error(qts, "max", "Parameter 'not-a-prop' is unexpected", + assert_error(qts, "max", "Parameter 'props.not-a-prop' is unexpected", "{ 'not-a-prop': false }"); assert_error(qts, "host", "The CPU type 'host' requires KVM", NULL); =20 --=20 2.44.0 From nobody Fri May 10 02:56:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1710250960; cv=none; d=zohomail.com; s=zohoarc; b=d+o3bpH2AfrODrrrFMQ29zRfGVspgMTMyWtAjJ4EerI0f5/2lsSYg3iUZY2ity5dyx0ue5oaFDIjdQOs/cfSQfrSJZe6zoL4+WimNMvGAcBdCBsaevpW1edUZBAO8yqtkl/yyl7aCKZYsphxHDPQ2ByQlgnQtbHmDVFCaLYHIic= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1710250960; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=m8vlKx+bZHBkZbZf8Ce0bxRf+THoDY2ly+inY6t+AvM=; b=RhffqaNGfgtOtyCgpFgfxa6hEa9ubWs4goXrSpgYiwsHBw7TJsqx1e2bGltbB9GLn3RPHeJkSzhU5U0AAw9U7ne573KybtfI9gMlmHnguACmDZVIyGhEI+aI/03qz3GstiIdQAvWFeyBU3kV+7L8raL+NV/TNCkaudovqNrW2KI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1710250960513939.4351777316014; Tue, 12 Mar 2024 06:42:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rk2Nu-0007Ug-8t; Tue, 12 Mar 2024 09:41:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rk2NZ-0007Dk-R5 for qemu-devel@nongnu.org; Tue, 12 Mar 2024 09:41:19 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rk2NX-0003cg-GV for qemu-devel@nongnu.org; Tue, 12 Mar 2024 09:41:16 -0400 Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-529-tRsv1HfIPr6RJw0pU80_rA-1; Tue, 12 Mar 2024 09:41:10 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2F0092802269; Tue, 12 Mar 2024 13:41:10 +0000 (UTC) Received: from blackfin.pond.sub.org (unknown [10.39.192.138]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0D6AE2024517; Tue, 12 Mar 2024 13:41:10 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id DF94421E691E; Tue, 12 Mar 2024 14:41:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1710250872; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=m8vlKx+bZHBkZbZf8Ce0bxRf+THoDY2ly+inY6t+AvM=; b=OZ87/ltvL38HsidLRPlkiQ39OrzWd2aBgX3Aqpi6zzrXwByuV2RI7VweJJHnj9uhEzP1wm tHDhuljY0CHVbcwdq0DsK0mPH0VheRn+0z86aeVgNCUXQ66X1kJ7uxBnvqANF1orMXPZ2C 65waDXgzGsKJD+w5/yOztGqb7LNXDXs= X-MC-Unique: tRsv1HfIPr6RJw0pU80_rA-1 From: Markus Armbruster To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Subject: [PULL 2/4] target/i386: Fix query-cpu-model-expansion to reject props Date: Tue, 12 Mar 2024 14:41:06 +0100 Message-ID: <20240312134108.3030801-3-armbru@redhat.com> In-Reply-To: <20240312134108.3030801-1-armbru@redhat.com> References: <20240312134108.3030801-1-armbru@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.4 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armbru@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.687, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1710250962502100002 Content-Type: text/plain; charset="utf-8" CpuModelInfo member @props is semantically a mapping from name to value, and syntactically a JSON object on the wire. This translates to QDict in C. Since the QAPI schema language lacks the means to express 'object', we use 'any' instead. This is QObject in C. Commands taking a CpuModelInfo argument need to check the QObject is a QDict. The i386 version of qmp_query_cpu_model_expansion() fails to check. Instead, @props is silently ignored when it's not an object. For instance, {"execute": "query-cpu-model-expansion", "arguments": {"type": "full", = "model": {"name": "qemu64", "props": null}}} succeeds. Fix by refactoring the code to match the other targets. Now the command fails as it should: {"error": {"class": "GenericError", "desc": "Invalid parameter type for= 'props', expected: object"}} Signed-off-by: Markus Armbruster Message-ID: <20240305145919.2186971-3-armbru@redhat.com> --- target/i386/cpu-sysemu.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/target/i386/cpu-sysemu.c b/target/i386/cpu-sysemu.c index 7422096737..df91f97827 100644 --- a/target/i386/cpu-sysemu.c +++ b/target/i386/cpu-sysemu.c @@ -25,6 +25,7 @@ #include "qapi/error.h" #include "qapi/qapi-visit-run-state.h" #include "qapi/qmp/qdict.h" +#include "qapi/qobject-input-visitor.h" #include "qom/qom-qobject.h" #include "qapi/qapi-commands-machine-target.h" #include "hw/qdev-properties.h" @@ -129,20 +130,35 @@ static void x86_cpu_to_dict_full(X86CPU *cpu, QDict *= props) } } =20 -static void object_apply_props(Object *obj, QDict *props, Error **errp) +static void object_apply_props(Object *obj, QObject *props, Error **errp) { + Visitor *visitor; + QDict *qdict; const QDictEntry *prop; =20 - for (prop =3D qdict_first(props); prop; prop =3D qdict_next(props, pro= p)) { - if (!object_property_set_qobject(obj, qdict_entry_key(prop), - qdict_entry_value(prop), errp)) { - break; + visitor =3D qobject_input_visitor_new(props); + if (!visit_start_struct(visitor, "props", NULL, 0, errp)) { + visit_free(visitor); + return; + } + + qdict =3D qobject_to(QDict, props); + for (prop =3D qdict_first(qdict); prop; prop =3D qdict_next(qdict, pro= p)) { + if (!object_property_set(obj, qdict_entry_key(prop), + visitor, errp)) { + goto out; } } + + visit_check_struct(visitor, errp); +out: + visit_end_struct(visitor, NULL); + visit_free(visitor); } =20 /* Create X86CPU object according to model+props specification */ -static X86CPU *x86_cpu_from_model(const char *model, QDict *props, Error *= *errp) +static X86CPU *x86_cpu_from_model(const char *model, QObject *props, + Error **errp) { X86CPU *xc =3D NULL; X86CPUClass *xcc; @@ -187,8 +203,7 @@ qmp_query_cpu_model_expansion(CpuModelExpansionType typ= e, QDict *props =3D NULL; const char *base_name; =20 - xc =3D x86_cpu_from_model(model->name, qobject_to(QDict, model->props), - &err); + xc =3D x86_cpu_from_model(model->name, model->props, &err); if (err) { goto out; } --=20 2.44.0 From nobody Fri May 10 02:56:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1710250938; cv=none; d=zohomail.com; s=zohoarc; b=bl/UOyAZnBsZloIqfI+QYlyIoYTasTO+gBqDsSau9WCsmNT3+OzqJAqo+NYzov7g66NIwX5AY5rS/XVAXdLQaeko5RZ8rl3SRfvzSLpCUzzXKhuRvcAAIKWxNtYYexy4iU8uGAtM/J/Cxoo5uk0hMj3k+GuWLRJmOix+dudDxtk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1710250938; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3S6YE9wvt++y9cH7Fz9PfSbIXEPrJuaYkv+vS+mXvqg=; b=QBvoStM7qBQxyGPxuV4TVuKprhIpCO1q8/EacwxM8rja7Ua0rOEjm7VhPLHHBcVS2PdRFeAIyt6R02sO1AU/Fe3/XP7/OdPJYGj5V0S3lLF5Cc4fn5gH1epxhuNGcdVqk5BYiz6WRXn0WAhQTV182qFqtUNBQQNZzu66oWlPZog= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1710250937939349.47092499953976; Tue, 12 Mar 2024 06:42:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rk2Nq-0007QH-I9; Tue, 12 Mar 2024 09:41:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rk2Na-0007Dm-8G for qemu-devel@nongnu.org; Tue, 12 Mar 2024 09:41:19 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rk2NX-0003e7-Ui for qemu-devel@nongnu.org; Tue, 12 Mar 2024 09:41:17 -0400 Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-512-Fu1NIGdCPEOtWG3ObGHJYg-1; Tue, 12 Mar 2024 09:41:10 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 51F6C1C04197; Tue, 12 Mar 2024 13:41:10 +0000 (UTC) Received: from blackfin.pond.sub.org (unknown [10.39.192.138]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0EBD1492BC7; Tue, 12 Mar 2024 13:41:10 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id E29A021E692E; Tue, 12 Mar 2024 14:41:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1710250875; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3S6YE9wvt++y9cH7Fz9PfSbIXEPrJuaYkv+vS+mXvqg=; b=Xe76JvpqVL8fqPuTZ07ACS1Eu/f19mdKs101qYZYGYS1ZaeH+SfdHfO4VsmbVqDIR+UxWy mRCUZsmsoAx34QR6xaxxXw17+xWG41L1JfGg65JMprMsIW+iMReCHXcCTuB7XUGJ0hVodE JyR6kXq8YtR6xL+bBMC2k6Y1f7HMNLM= X-MC-Unique: Fu1NIGdCPEOtWG3ObGHJYg-1 From: Markus Armbruster To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, Daniel Henrique Barboza Subject: [PULL 3/4] target: Improve error reporting for CpuModelInfo member @props Date: Tue, 12 Mar 2024 14:41:07 +0100 Message-ID: <20240312134108.3030801-4-armbru@redhat.com> In-Reply-To: <20240312134108.3030801-1-armbru@redhat.com> References: <20240312134108.3030801-1-armbru@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.9 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armbru@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.687, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1710250938427100001 Content-Type: text/plain; charset="utf-8" query-cpu-model-comparison, query-cpu-model-baseline, and query-cpu-model-expansion take CpuModelInfo arguments. Errors in @props members of these arguments are reported for 'props', without further context. For instance, s390x rejects {"execute": "query-cpu-model-comparison", "arguments": {"modela": {"nam= e": "z13", "props": {}}, "modelb": {"name": "z14", "props": []}}} with {"error": {"class": "GenericError", "desc": "Invalid parameter type for= 'props', expected: object"}} This is unusual; the common QAPI unmarshaling machinery would complain about 'modelb.props'. Our hand-written code to visit the @props member neglects to provide the context. Tweak it so it provides it. The command above now fails with {"error": {"class": "GenericError", "desc": "Invalid parameter type for= 'modelb.props', expected: dict"}} Signed-off-by: Markus Armbruster Message-ID: <20240305145919.2186971-4-armbru@redhat.com> Acked-by: Daniel Henrique Barboza --- target/arm/arm-qmp-cmds.c | 2 +- target/i386/cpu-sysemu.c | 11 ++++++----- target/riscv/riscv-qmp-cmds.c | 6 ++++-- target/s390x/cpu_models_sysemu.c | 17 ++++++++++------- tests/qtest/arm-cpu-features.c | 5 +++-- 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/target/arm/arm-qmp-cmds.c b/target/arm/arm-qmp-cmds.c index f85576f13e..3cc8cc738b 100644 --- a/target/arm/arm-qmp-cmds.c +++ b/target/arm/arm-qmp-cmds.c @@ -157,7 +157,7 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(Cp= uModelExpansionType type, Error *err =3D NULL; =20 visitor =3D qobject_input_visitor_new(model->props); - if (!visit_start_struct(visitor, "props", NULL, 0, errp)) { + if (!visit_start_struct(visitor, "model.props", NULL, 0, errp)) { visit_free(visitor); object_unref(obj); return NULL; diff --git a/target/i386/cpu-sysemu.c b/target/i386/cpu-sysemu.c index df91f97827..3f9093d285 100644 --- a/target/i386/cpu-sysemu.c +++ b/target/i386/cpu-sysemu.c @@ -130,14 +130,15 @@ static void x86_cpu_to_dict_full(X86CPU *cpu, QDict *= props) } } =20 -static void object_apply_props(Object *obj, QObject *props, Error **errp) +static void object_apply_props(Object *obj, QObject *props, + const char *props_arg_name, Error **errp) { Visitor *visitor; QDict *qdict; const QDictEntry *prop; =20 visitor =3D qobject_input_visitor_new(props); - if (!visit_start_struct(visitor, "props", NULL, 0, errp)) { + if (!visit_start_struct(visitor, props_arg_name, NULL, 0, errp)) { visit_free(visitor); return; } @@ -158,7 +159,7 @@ out: =20 /* Create X86CPU object according to model+props specification */ static X86CPU *x86_cpu_from_model(const char *model, QObject *props, - Error **errp) + const char *props_arg_name, Error **errp) { X86CPU *xc =3D NULL; X86CPUClass *xcc; @@ -172,7 +173,7 @@ static X86CPU *x86_cpu_from_model(const char *model, QO= bject *props, =20 xc =3D X86_CPU(object_new_with_class(OBJECT_CLASS(xcc))); if (props) { - object_apply_props(OBJECT(xc), props, &err); + object_apply_props(OBJECT(xc), props, props_arg_name, &err); if (err) { goto out; } @@ -203,7 +204,7 @@ qmp_query_cpu_model_expansion(CpuModelExpansionType typ= e, QDict *props =3D NULL; const char *base_name; =20 - xc =3D x86_cpu_from_model(model->name, model->props, &err); + xc =3D x86_cpu_from_model(model->name, model->props, "model.props", &e= rr); if (err) { goto out; } diff --git a/target/riscv/riscv-qmp-cmds.c b/target/riscv/riscv-qmp-cmds.c index d0360c0528..d363dc318d 100644 --- a/target/riscv/riscv-qmp-cmds.c +++ b/target/riscv/riscv-qmp-cmds.c @@ -128,6 +128,7 @@ static void riscv_obj_add_profiles_qdict(Object *obj, Q= Dict *qdict_out) } =20 static void riscv_cpuobj_validate_qdict_in(Object *obj, QObject *props, + const char *props_arg_name, Error **errp) { const QDict *qdict_in; @@ -136,7 +137,7 @@ static void riscv_cpuobj_validate_qdict_in(Object *obj,= QObject *props, Error *local_err =3D NULL; =20 visitor =3D qobject_input_visitor_new(props); - if (!visit_start_struct(visitor, "props", NULL, 0, &local_err)) { + if (!visit_start_struct(visitor, props_arg_name, NULL, 0, &local_err))= { goto err; } =20 @@ -197,7 +198,8 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(Cp= uModelExpansionType type, } =20 if (model->props) { - riscv_cpuobj_validate_qdict_in(obj, model->props, &local_err); + riscv_cpuobj_validate_qdict_in(obj, model->props, "model.props", + &local_err); if (local_err) { error_propagate(errp, local_err); object_unref(obj); diff --git a/target/s390x/cpu_models_sysemu.c b/target/s390x/cpu_models_sys= emu.c index 53bce8adb2..2d99218069 100644 --- a/target/s390x/cpu_models_sysemu.c +++ b/target/s390x/cpu_models_sysemu.c @@ -97,7 +97,7 @@ CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **= errp) } =20 static void cpu_model_from_info(S390CPUModel *model, const CpuModelInfo *i= nfo, - Error **errp) + const char *info_arg_name, Error **errp) { Error *err =3D NULL; const QDict *qdict; @@ -127,8 +127,11 @@ static void cpu_model_from_info(S390CPUModel *model, c= onst CpuModelInfo *info, } =20 if (info->props) { + g_autofree const char *props_name =3D g_strdup_printf("%s.props", + info_arg_name); + visitor =3D qobject_input_visitor_new(info->props); - if (!visit_start_struct(visitor, "props", NULL, 0, errp)) { + if (!visit_start_struct(visitor, props_name, NULL, 0, errp)) { visit_free(visitor); object_unref(obj); return; @@ -215,7 +218,7 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(Cp= uModelExpansionType type, bool delta_changes =3D false; =20 /* convert it to our internal representation */ - cpu_model_from_info(&s390_model, model, &err); + cpu_model_from_info(&s390_model, model, "model", &err); if (err) { error_propagate(errp, err); return NULL; @@ -253,12 +256,12 @@ CpuModelCompareInfo *qmp_query_cpu_model_comparison(C= puModelInfo *infoa, S390CPUModel modela, modelb; =20 /* convert both models to our internal representation */ - cpu_model_from_info(&modela, infoa, &err); + cpu_model_from_info(&modela, infoa, "modela", &err); if (err) { error_propagate(errp, err); return NULL; } - cpu_model_from_info(&modelb, infob, &err); + cpu_model_from_info(&modelb, infob, "modelb", &err); if (err) { error_propagate(errp, err); return NULL; @@ -330,13 +333,13 @@ CpuModelBaselineInfo *qmp_query_cpu_model_baseline(Cp= uModelInfo *infoa, uint8_t max_gen; =20 /* convert both models to our internal representation */ - cpu_model_from_info(&modela, infoa, &err); + cpu_model_from_info(&modela, infoa, "modela", &err); if (err) { error_propagate(errp, err); return NULL; } =20 - cpu_model_from_info(&modelb, infob, &err); + cpu_model_from_info(&modelb, infob, "modelb", &err); if (err) { error_propagate(errp, err); return NULL; diff --git a/tests/qtest/arm-cpu-features.c b/tests/qtest/arm-cpu-features.c index 1daceb2e31..9d6e6190d5 100644 --- a/tests/qtest/arm-cpu-features.c +++ b/tests/qtest/arm-cpu-features.c @@ -213,7 +213,8 @@ static void assert_bad_props(QTestState *qts, const cha= r *cpu_type) error =3D resp_get_error(resp); g_assert(error); g_assert_cmpstr(error, =3D=3D, - "Invalid parameter type for 'props', expected: object"= ); + "Invalid parameter type for 'model.props'," + " expected: object"); qobject_unref(resp); } =20 @@ -446,7 +447,7 @@ static void test_query_cpu_model_expansion(const void *= data) assert_bad_props(qts, "max"); assert_error(qts, "foo", "The CPU type 'foo' is not a recognized " "ARM CPU type", NULL); - assert_error(qts, "max", "Parameter 'props.not-a-prop' is unexpected", + assert_error(qts, "max", "Parameter 'model.props.not-a-prop' is unexpe= cted", "{ 'not-a-prop': false }"); assert_error(qts, "host", "The CPU type 'host' requires KVM", NULL); =20 --=20 2.44.0 From nobody Fri May 10 02:56:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1710250953; cv=none; d=zohomail.com; s=zohoarc; b=kKwVhN/0uajZACFN0t4aXtzilg7GDwGEjtaQhUEY1KT31hjiXfX3H11EjmSpsUwzGknXeTIh4ePuGfkR7ZeyrvJAThWaRC+1Pq0lxRApNteDrbfnw7ujoQh47/kOApZmADX6tNmN+6vQIck6ltIC+vq3fkc8f0ag1Hobzry6nig= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1710250953; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1WcUTy+akApizBaxjoVsyLwVwAl1LGxafwYZv6uq034=; b=RMykaGKnYc28wzpQI76fhLU/L4JzQ3+VhS4WoGa/ldCVAED+eNEv15iP4XJ8Gv5vtJK9UDxK+8oDptVv5yIdJKdMOdhX+5Vpcb3lByQwv2LKvYDxn8yRJ1suukW4SQ4WaDNWRkmMHECrhHcQvbCR3x35GmzRP3fkUsrEeOQJswc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1710250952854919.0466188000939; Tue, 12 Mar 2024 06:42:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rk2Nu-0007W4-GY; Tue, 12 Mar 2024 09:41:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rk2Nj-0007NZ-Nq for qemu-devel@nongnu.org; Tue, 12 Mar 2024 09:41:29 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rk2NW-0003do-76 for qemu-devel@nongnu.org; Tue, 12 Mar 2024 09:41:27 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-350-0NVYtER5PJ-kVOpOdrHJIA-1; Tue, 12 Mar 2024 09:41:10 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 308538007AD; Tue, 12 Mar 2024 13:41:10 +0000 (UTC) Received: from blackfin.pond.sub.org (unknown [10.39.192.138]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0E024112132A; Tue, 12 Mar 2024 13:41:10 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id E576421E6939; Tue, 12 Mar 2024 14:41:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1710250873; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1WcUTy+akApizBaxjoVsyLwVwAl1LGxafwYZv6uq034=; b=C0ACiYCPn279/t7O+1SZ9wg6UYiwOLgKnIiuv50uSs6bCHKZOBi0Yi/wjVS8MzNcOTEUBH yCnhourKnMlorhodcgaweKjOeK03+AMk0tq+rBG2s97BIlL2GhfnxbQgh22JSeXENTi4mc ULa6YUzRONeauEhJzxStQKnwWPq+8Lg= X-MC-Unique: 0NVYtER5PJ-kVOpOdrHJIA-1 From: Markus Armbruster To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Subject: [PULL 4/4] target/loongarch: Fix query-cpu-model-expansion to reject props Date: Tue, 12 Mar 2024 14:41:08 +0100 Message-ID: <20240312134108.3030801-5-armbru@redhat.com> In-Reply-To: <20240312134108.3030801-1-armbru@redhat.com> References: <20240312134108.3030801-1-armbru@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.3 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armbru@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.687, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1710250954447100001 Content-Type: text/plain; charset="utf-8" query-cpu-model-expansion takes a CpuModelInfo argument. The loongarch version of the command silently ignores the argument's member @props. For instance, {"execute": "query-cpu-model-expansion", "arguments": {"type": "static"= , "model": {"name": "la464", "props": null}}} and {"execute": "query-cpu-model-expansion", "arguments": {"type": "static"= , "model": {"name": "la464", "props": {"prop": null}}}} succeed. Add skeleton code for property processing that recognizes no properties. Now the two commands fail as they should: {"error": {"class": "GenericError", "desc": "Invalid parameter type for= 'model.props', expected: object"}} and {"error": {"class": "GenericError", "desc": "Parameter 'model.props.pro= p' is unexpected"}} Signed-off-by: Markus Armbruster Message-ID: <20240305145919.2186971-5-armbru@redhat.com> [Drop #include now superfluous] --- target/loongarch/loongarch-qmp-cmds.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/target/loongarch/loongarch-qmp-cmds.c b/target/loongarch/loong= arch-qmp-cmds.c index ec33ce81f0..8721a5eb13 100644 --- a/target/loongarch/loongarch-qmp-cmds.c +++ b/target/loongarch/loongarch-qmp-cmds.c @@ -10,7 +10,6 @@ #include "qapi/error.h" #include "qapi/qapi-commands-machine-target.h" #include "cpu.h" -#include "qapi/qmp/qerror.h" #include "qapi/qmp/qdict.h" #include "qapi/qobject-input-visitor.h" #include "qom/qom-qobject.h" @@ -48,6 +47,8 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuM= odelExpansionType type, CpuModelInfo *model, Error **errp) { + Visitor *visitor; + bool ok; CpuModelExpansionInfo *expansion_info; QDict *qdict_out; ObjectClass *oc; @@ -60,6 +61,21 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(Cpu= ModelExpansionType type, return NULL; } =20 + if (model->props) { + visitor =3D qobject_input_visitor_new(model->props); + if (!visit_start_struct(visitor, "model.props", NULL, 0, errp)) { + visit_free(visitor); + return NULL; + } + + ok =3D visit_check_struct(visitor, errp); + visit_end_struct(visitor, NULL); + visit_free(visitor); + if (!ok) { + return NULL; + } + } + oc =3D cpu_class_by_name(TYPE_LOONGARCH_CPU, model->name); if (!oc) { error_setg(errp, "The CPU type '%s' is not a recognized LoongArch = CPU type", --=20 2.44.0