On Fri, Sep 30, 2022 at 9:59 AM Marc-André Lureau <[email protected]> wrote: > > Hi > > On Fri, Sep 30, 2022 at 11:53 AM Paolo Bonzini <[email protected]> wrote: >> >> The generated skeletons for DBus call the finalize method of the parent >> type using code like >> >> G_OBJECT_CLASS >> (qemu_dbus_display1_chardev_skeleton_parent_class)->finalize (object); >> >> However, the finalize method is defined in a shared library that is not >> compiled with CFI. Do not enable anything that uses gdbus-codegen if >> --enable-cfi was specified. > > I had the same analysis. But what if gdbus (or other dependencies) is > compiled with CFI ? Note: I have no idea if CFI is meant to be usable in > production or just for developers.
Yeah, in theory it's possible but I think it's very unlikely. For libslirp QEMU ignores that possibility and requires a version with a fixed API, but that's not really possible for the gdbus superclasses. Paolo >> >> Signed-off-by: Paolo Bonzini <[email protected]> > > > Reviewed-by: Marc-André Lureau <[email protected]> > > >> >> --- >> meson.build | 7 ++++++- >> 1 file changed, 6 insertions(+), 1 deletion(-) >> >> diff --git a/meson.build b/meson.build >> index f6962834a3..6106daf267 100644 >> --- a/meson.build >> +++ b/meson.build >> @@ -515,6 +515,7 @@ meson.override_dependency('glib-2.0', glib) >> >> gio = not_found >> gdbus_codegen = not_found >> +gdbus_codegen_error = '@0@ requires gdbus-codegen, please install libgio' >> if not get_option('gio').auto() or have_system >> gio = dependency('gio-2.0', required: get_option('gio'), >> method: 'pkg-config', kwargs: static_kwargs) >> @@ -539,6 +540,10 @@ if not get_option('gio').auto() or have_system >> version: gio.version()) >> endif >> endif >> +if gdbus_codegen.found() and get_option('cfi') >> + gdbus_codegen = not_found >> + gdbus_codegen_error = '@0@ uses gdbus-codegen, which does not support >> control flow integrity') >> +endif >> >> lttng = not_found >> if 'ust' in get_option('trace_backends') >> @@ -1697,7 +1702,7 @@ dbus_display = get_option('dbus_display') \ >> .require(gio.version().version_compare('>=2.64'), >> error_message: '-display dbus requires glib>=2.64') \ >> .require(gdbus_codegen.found(), >> - error_message: '-display dbus requires gdbus-codegen') \ >> + error_message: gdbus_codegen_error.format('-display dbus')) \ >> .require(opengl.found() and gbm.found(), >> error_message: '-display dbus requires epoxy/egl and gbm') \ >> .allowed() >> -- >> 2.37.3 >> >> > > > -- > Marc-André Lureau
