From 00829ae3845fd11e56239390924e3e74c3a4c144 Mon Sep 17 00:00:00 2001 From: Zesen Liu Date: Wed, 17 Dec 2025 11:59:52 +0800 Subject: [PATCH] qdev: fix error handling in set_uint64_checkmask When specifying lbr_fmt=VALUE in cpu options with an invalid VALUE, error_setg() gets triggered twice, causing an assertion failure in error_setv() which requires *errp to be NULL, preventing meaningful error messages from being displayed. Fix this by checking visit_type_uint64()'s return value and returning early on failure, consistent with other property setters like set_string(). Fixes: 18c22d7112a7 (qdev-properties: Add a new macro with bitmask check for uint64_t property) Cc: qemu-stable@nongnu.org Signed-off-by: Zesen Liu Message-ID: <20251217-qdev-fix-v1-1-bd33ea463220@gmail.com> Reviewed-by: Markus Armbruster [Add Fixes: and Cc:] Signed-off-by: Markus Armbruster --- hw/core/qdev-properties.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index 422a486969..0930d64252 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -494,7 +494,9 @@ static void set_uint64_checkmask(Object *obj, Visitor *v, const char *name, const Property *prop = opaque; uint64_t *ptr = object_field_prop_ptr(obj, prop); - visit_type_uint64(v, name, ptr, errp); + if (!visit_type_uint64(v, name, ptr, errp)) { + return; + } if (*ptr & ~prop->bitmask) { error_setg(errp, "Property value for '%s' has bits outside mask '0x%" PRIx64 "'", name, prop->bitmask);