[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 9/9] qom: use correct field name when getting/setting alias proper
From: |
Paolo Bonzini |
Subject: |
[PULL 9/9] qom: use correct field name when getting/setting alias properties |
Date: |
Sat, 24 Jul 2021 10:54:53 +0200 |
Alias targets have a different name than the alias property itself
(e.g. a machine's pflash0 might be an alias of a property named 'drive').
When the target's getter or setter invokes the visitor, it will use
a different name than what the caller expects, and the visitor will
not be able to find it (or will consume erroneously).
The solution is for alias getters and setters to wrap the incoming
visitor, and forward the sole field that the target is expecting while
renaming it appropriately.
This bug has been there forever, but it was exposed after -M parsing
switched from QemuOptions and StringInputVisitor to keyval and
QObjectInputVisitor. Before, the visitor ignored the name. Now, it
checks "drive" against what was passed on the command line and finds
that no such property exists.
Fixes: https://gitlab.com/qemu-project/qemu/-/issues/484
Reported-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
qom/object.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/qom/object.c b/qom/object.c
index 6a01d56546..e86cb05b84 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -20,6 +20,7 @@
#include "qapi/string-input-visitor.h"
#include "qapi/string-output-visitor.h"
#include "qapi/qobject-input-visitor.h"
+#include "qapi/forward-visitor.h"
#include "qapi/qapi-builtin-visit.h"
#include "qapi/qmp/qerror.h"
#include "qapi/qmp/qjson.h"
@@ -2683,16 +2684,20 @@ static void property_get_alias(Object *obj, Visitor *v,
const char *name,
void *opaque, Error **errp)
{
AliasProperty *prop = opaque;
+ Visitor *alias_v = visitor_forward_field(v, prop->target_name, name);
- object_property_get(prop->target_obj, prop->target_name, v, errp);
+ object_property_get(prop->target_obj, prop->target_name, alias_v, errp);
+ visit_free(alias_v);
}
static void property_set_alias(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
AliasProperty *prop = opaque;
+ Visitor *alias_v = visitor_forward_field(v, prop->target_name, name);
- object_property_set(prop->target_obj, prop->target_name, v, errp);
+ object_property_set(prop->target_obj, prop->target_name, alias_v, errp);
+ visit_free(alias_v);
}
static Object *property_resolve_alias(Object *obj, void *opaque,
--
2.31.1
- [PULL 0/9] Misc QEMU patches for 6.0-rc, Paolo Bonzini, 2021/07/24
- [PULL 1/9] meson: fix dependencies for modinfo #2, Paolo Bonzini, 2021/07/24
- [PULL 2/9] target/i386: Added consistency checks for CR3, Paolo Bonzini, 2021/07/24
- [PULL 4/9] MAINTAINERS: Replace Eduardo as "Host Memory Backends" maintainer, Paolo Bonzini, 2021/07/24
- [PULL 9/9] qom: use correct field name when getting/setting alias properties,
Paolo Bonzini <=
- [PULL 5/9] MAINTAINERS: Add Peter Xu and myself as co-maintainer of "Memory API", Paolo Bonzini, 2021/07/24
- [PULL 3/9] i386: do not call cpudef-only models functions for max, host, base, Paolo Bonzini, 2021/07/24
- [PULL 7/9] gitlab: only let pages be published from default branch, Paolo Bonzini, 2021/07/24
- [PULL 6/9] MAINTAINERS: Add memory_mapping.h and memory_mapping.c to "Memory API", Paolo Bonzini, 2021/07/24
- [PULL 8/9] qapi: introduce forwarding visitor, Paolo Bonzini, 2021/07/24
- Re: [PULL 0/9] Misc QEMU patches for 6.0-rc, Peter Maydell, 2021/07/24