qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] spapr: fix core unplug crash
@ 2016-07-08 13:12 Greg Kurz
  2016-07-08 15:47 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
  2016-07-11  1:40 ` [Qemu-devel] " David Gibson
  0 siblings, 2 replies; 5+ messages in thread
From: Greg Kurz @ 2016-07-08 13:12 UTC (permalink / raw)
  To: David Gibson; +Cc: qemu-ppc, qemu-devel, Bharata B Rao

If the host has 8 threads/core and the guest is started with:

-smp cores=1,threads=4,maxcpus=12

It is possible to crash QEMU by doing:

(qemu) device_add host-spapr-cpu-core,core-id=16,id=foo
(qemu) device_del foo
Segmentation fault

This is caused because spapr_core_unplug() assumes cpu_dt_id == core_id.
Even if it happens to be the case when the host and guest have the same
number of threads per core, it is conceptually wrong and we may pass a
bogus id to spapr_dr_connector_by_id() and spapr_core_release() crashes.

Let's use cc->core_id, which is the id that was used to create th DR
connector.

Signed-off-by: Greg Kurz <groug@kaod.org>
---
 hw/ppc/spapr_cpu_core.c |    6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index 70b6b0b5ee17..106eaf45b399 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -126,11 +126,9 @@ static void spapr_core_release(DeviceState *dev, void *opaque)
 void spapr_core_unplug(HotplugHandler *hotplug_dev, DeviceState *dev,
                        Error **errp)
 {
-    sPAPRCPUCore *core = SPAPR_CPU_CORE(OBJECT(dev));
-    PowerPCCPU *cpu = POWERPC_CPU(core->threads);
-    int id = ppc_get_vcpu_dt_id(cpu);
+    CPUCore *cc = CPU_CORE(dev);
     sPAPRDRConnector *drc =
-        spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_CPU, id);
+        spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_CPU, cc->core_id);
     sPAPRDRConnectorClass *drck;
     Error *local_err = NULL;
 

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-07-11  2:19 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-08 13:12 [Qemu-devel] [PATCH] spapr: fix core unplug crash Greg Kurz
2016-07-08 15:47 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2016-07-10 14:47   ` Bharata B Rao
2016-07-11  1:42   ` David Gibson
2016-07-11  1:40 ` [Qemu-devel] " David Gibson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).