All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eduardo Habkost <ehabkost@redhat.com>
To: Thomas Huth <thuth@redhat.com>
Cc: Laurent Vivier <lvivier@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	QEMU Developers <qemu-devel@nongnu.org>,
	Markus Armbruster <armbru@redhat.com>,
	qemu-arm <qemu-arm@nongnu.org>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-arm] [PATCH] hw/arm/bcm283x: Fix crash with device_add bcm2837 on unsupported machines
Date: Wed, 11 Jul 2018 13:12:16 -0300	[thread overview]
Message-ID: <20180711161216.GV7451@localhost.localdomain> (raw)
In-Reply-To: <931c0545-e3d8-fc84-9b69-59fab040265c@redhat.com>

On Wed, Jul 11, 2018 at 09:21:48AM +0200, Thomas Huth wrote:
> On 10.07.2018 08:50, Peter Maydell wrote:
> > On 9 July 2018 at 23:03, Thomas Huth <thuth@redhat.com> wrote:
> >> On 09.07.2018 23:42, Peter Maydell wrote:
> >>> On 9 July 2018 at 22:03, Thomas Huth <thuth@redhat.com> wrote:
> >>>> When trying to "device_add bcm2837" on a machine that is not suitable for
> >>>> this device, you can quickly crash QEMU afterwards, e.g. with "info qtree":
> >>>>
> >>>> echo "{'execute':'qmp_capabilities'} {'execute':'device_add', " \
> >>>>  "'arguments':{'driver':'bcm2837'}} {'execute': 'human-monitor-command', " \
> >>>>  "'arguments': {'command-line': 'info qtree'}}" | \
> >>>>  aarch64-softmmu/qemu-system-aarch64 -M integratorcp,accel=qtest -S -qmp stdio
> >>>>
> >>>> {"QMP": {"version": {"qemu": {"micro": 50, "minor": 12, "major": 2},
> >>>>  "package": "build-all"}, "capabilities": []}}
> >>>> {"return": {}}
> >>>> {"error": {"class": "GenericError", "desc": "Device 'bcm2837' can not be
> >>>>  hotplugged on this machine"}}
> >>>> Segmentation fault (core dumped)
> >>>>
> >>>> The problem is that qdev_set_parent_bus() from instance_init adds a link
> >>>> to the child devices which is not valid anymore after the device init
> >>>> failed. Thus the qdev_set_parent_bus() must rather be done in the realize
> >>>> function instead.
> >>>
> >>> Yuck. The real problem here is that we're still requiring the
> >>> code that creates these QOM devices to manually set the parent
> >>> in the first place. It's not surprising that we don't get it right
> >>> (either parenting in the wrong place or not at all). I'd much
> >>> rather see us fix that properly than keep papering over places
> >>> where we get it wrong.
> >>
> >> Sorry, I'm still not an expert in all this QOM stuff yet ... so what do
> >> you exactly recommend to do instead?
> > 
> > I'm not clear either, but I don't think that what we're
> > currently doing can be right.
> 
> Hm, ok, so how to continue here now? Shall we at least mark the
> bcm2836/7 devices with user_creatable=false, so that users can not crash
> their QEMU so easily with device_add? The problem with introspection via
> device-list-properties would still continue to exist, but I think that's
> less likely used in practice... otherwise we could still move the
> qdev_set_parent_bus() calls to the realize() function instead, and just
> add a big fat FIXME comment in front of the code block, so that we
> remember to clean that up one day...

Crashing device-list-properties should be a blocker bug, IMO.

Moving to realize is not the best solution, but I would prefer to
do that in 3.0 instead of leaving the device-list-properties
crash unfixed.

Another solution is to reintroduce
DeviceClass::cannot_destroy_with_object_finalize_yet (commit
08f00df4f4b8b4e38ad620477cc90cf5f73832d9), and set
cannot_destroy_with_object_finalize_yet=true on bcm2837.

-- 
Eduardo

WARNING: multiple messages have this Message-ID (diff)
From: Eduardo Habkost <ehabkost@redhat.com>
To: Thomas Huth <thuth@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
	QEMU Developers <qemu-devel@nongnu.org>,
	qemu-arm <qemu-arm@nongnu.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Markus Armbruster <armbru@redhat.com>,
	Laurent Vivier <lvivier@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] hw/arm/bcm283x: Fix crash with device_add bcm2837 on unsupported machines
Date: Wed, 11 Jul 2018 13:12:16 -0300	[thread overview]
Message-ID: <20180711161216.GV7451@localhost.localdomain> (raw)
In-Reply-To: <931c0545-e3d8-fc84-9b69-59fab040265c@redhat.com>

On Wed, Jul 11, 2018 at 09:21:48AM +0200, Thomas Huth wrote:
> On 10.07.2018 08:50, Peter Maydell wrote:
> > On 9 July 2018 at 23:03, Thomas Huth <thuth@redhat.com> wrote:
> >> On 09.07.2018 23:42, Peter Maydell wrote:
> >>> On 9 July 2018 at 22:03, Thomas Huth <thuth@redhat.com> wrote:
> >>>> When trying to "device_add bcm2837" on a machine that is not suitable for
> >>>> this device, you can quickly crash QEMU afterwards, e.g. with "info qtree":
> >>>>
> >>>> echo "{'execute':'qmp_capabilities'} {'execute':'device_add', " \
> >>>>  "'arguments':{'driver':'bcm2837'}} {'execute': 'human-monitor-command', " \
> >>>>  "'arguments': {'command-line': 'info qtree'}}" | \
> >>>>  aarch64-softmmu/qemu-system-aarch64 -M integratorcp,accel=qtest -S -qmp stdio
> >>>>
> >>>> {"QMP": {"version": {"qemu": {"micro": 50, "minor": 12, "major": 2},
> >>>>  "package": "build-all"}, "capabilities": []}}
> >>>> {"return": {}}
> >>>> {"error": {"class": "GenericError", "desc": "Device 'bcm2837' can not be
> >>>>  hotplugged on this machine"}}
> >>>> Segmentation fault (core dumped)
> >>>>
> >>>> The problem is that qdev_set_parent_bus() from instance_init adds a link
> >>>> to the child devices which is not valid anymore after the device init
> >>>> failed. Thus the qdev_set_parent_bus() must rather be done in the realize
> >>>> function instead.
> >>>
> >>> Yuck. The real problem here is that we're still requiring the
> >>> code that creates these QOM devices to manually set the parent
> >>> in the first place. It's not surprising that we don't get it right
> >>> (either parenting in the wrong place or not at all). I'd much
> >>> rather see us fix that properly than keep papering over places
> >>> where we get it wrong.
> >>
> >> Sorry, I'm still not an expert in all this QOM stuff yet ... so what do
> >> you exactly recommend to do instead?
> > 
> > I'm not clear either, but I don't think that what we're
> > currently doing can be right.
> 
> Hm, ok, so how to continue here now? Shall we at least mark the
> bcm2836/7 devices with user_creatable=false, so that users can not crash
> their QEMU so easily with device_add? The problem with introspection via
> device-list-properties would still continue to exist, but I think that's
> less likely used in practice... otherwise we could still move the
> qdev_set_parent_bus() calls to the realize() function instead, and just
> add a big fat FIXME comment in front of the code block, so that we
> remember to clean that up one day...

Crashing device-list-properties should be a blocker bug, IMO.

Moving to realize is not the best solution, but I would prefer to
do that in 3.0 instead of leaving the device-list-properties
crash unfixed.

Another solution is to reintroduce
DeviceClass::cannot_destroy_with_object_finalize_yet (commit
08f00df4f4b8b4e38ad620477cc90cf5f73832d9), and set
cannot_destroy_with_object_finalize_yet=true on bcm2837.

-- 
Eduardo

  reply	other threads:[~2018-07-11 16:12 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-09 21:03 [Qemu-arm] [PATCH] hw/arm/bcm283x: Fix crash with device_add bcm2837 on unsupported machines Thomas Huth
2018-07-09 21:03 ` [Qemu-devel] " Thomas Huth
2018-07-09 21:31 ` [Qemu-arm] " Eduardo Habkost
2018-07-09 21:31   ` [Qemu-devel] " Eduardo Habkost
2018-07-09 21:36   ` [Qemu-arm] " Thomas Huth
2018-07-09 21:36     ` [Qemu-devel] " Thomas Huth
2018-07-09 21:42 ` [Qemu-arm] " Peter Maydell
2018-07-09 21:42   ` [Qemu-devel] " Peter Maydell
2018-07-09 22:03   ` [Qemu-arm] " Thomas Huth
2018-07-09 22:03     ` [Qemu-devel] " Thomas Huth
2018-07-10  6:50     ` [Qemu-arm] " Peter Maydell
2018-07-10  6:50       ` [Qemu-devel] " Peter Maydell
2018-07-11  7:21       ` [Qemu-arm] " Thomas Huth
2018-07-11  7:21         ` [Qemu-devel] " Thomas Huth
2018-07-11 16:12         ` Eduardo Habkost [this message]
2018-07-11 16:12           ` Eduardo Habkost
2018-07-11 17:15           ` [Qemu-arm] " Peter Maydell
2018-07-11 17:15             ` [Qemu-devel] " Peter Maydell
2018-07-12 12:06             ` [Qemu-arm] " Markus Armbruster
2018-07-12 12:06               ` Markus Armbruster
2018-07-12 12:55               ` [Qemu-arm] " Peter Maydell
2018-07-12 12:55                 ` Peter Maydell
2018-07-12 13:19                 ` [Qemu-arm] " Markus Armbruster
2018-07-12 13:19                   ` Markus Armbruster
2018-07-12 15:25               ` [Qemu-arm] " Thomas Huth
2018-07-12 15:25                 ` Thomas Huth
2018-07-12 16:16                 ` [Qemu-arm] " Markus Armbruster
2018-07-12 16:16                   ` Markus Armbruster
2018-07-12 16:22                   ` [Qemu-arm] " Peter Maydell
2018-07-12 16:22                     ` Peter Maydell
2018-07-12 16:32                     ` Thomas Huth
2018-07-16  6:41                       ` [Qemu-arm] " Markus Armbruster
2018-07-16  6:41                         ` Markus Armbruster
2018-07-11 17:21       ` [Qemu-arm] " Paolo Bonzini
2018-07-11 17:21         ` [Qemu-devel] " Paolo Bonzini
2018-07-11 19:04         ` [Qemu-arm] " Thomas Huth
2018-07-11 19:04           ` [Qemu-devel] " Thomas Huth
2018-07-11 19:59           ` [Qemu-arm] " Eduardo Habkost
2018-07-11 19:59             ` [Qemu-devel] " Eduardo Habkost
2018-07-12  8:04             ` [Qemu-arm] " Paolo Bonzini
2018-07-12  8:04               ` Paolo Bonzini
2018-07-12 12:04     ` [Qemu-arm] " Markus Armbruster
2018-07-12 12:04       ` Markus Armbruster
2018-07-11 17:20 ` [Qemu-arm] " Paolo Bonzini
2018-07-11 17:20   ` [Qemu-devel] " Paolo Bonzini
2018-07-11 18:30   ` [Qemu-arm] " Eduardo Habkost
2018-07-11 18:30     ` [Qemu-devel] " Eduardo Habkost
2018-07-11 20:16     ` [Qemu-arm] " Paolo Bonzini
2018-07-11 20:16       ` [Qemu-devel] " Paolo Bonzini
2018-07-11 20:23       ` [Qemu-arm] " Eduardo Habkost
2018-07-11 20:23         ` [Qemu-devel] " Eduardo Habkost
2018-07-12  8:05         ` Paolo Bonzini
2018-07-12 18:04           ` [Qemu-arm] " Eduardo Habkost
2018-07-12 18:04             ` Eduardo Habkost
2018-07-16  6:43             ` [Qemu-arm] " Markus Armbruster
2018-07-16  6:43               ` Markus Armbruster
2018-07-16 14:25               ` [Qemu-arm] " Eduardo Habkost
2018-07-16 14:25                 ` Eduardo Habkost
2018-07-11 18:43   ` [Qemu-arm] " Thomas Huth
2018-07-11 18:43     ` [Qemu-devel] " Thomas Huth
2018-07-11 20:15     ` [Qemu-arm] " Paolo Bonzini
2018-07-11 20:15       ` [Qemu-devel] " Paolo Bonzini
2018-07-12  5:57       ` [Qemu-arm] " Thomas Huth
2018-07-12  5:57         ` [Qemu-devel] " Thomas Huth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180711161216.GV7451@localhost.localdomain \
    --to=ehabkost@redhat.com \
    --cc=armbru@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.