Hi Peter,

Setup an ARM virtual machine of machine virt and execute qmp 
"query-acpi-ospm-status" can trigger this bug.

Thanks.

-----邮件原件-----
发件人: Qemu-devel [mailto:qemu-devel-bounces+zhukeqian1=huawei....@nongnu.org] 代表 
Peter Maydell
发送时间: 2022年8月16日 17:30
收件人: zhukeqian <zhukeqi...@huawei.com>
抄送: qemu-devel@nongnu.org; qemu-...@nongnu.org; qemu-triv...@nongnu.org; 
Philippe Mathieu-Daudé <phi...@redhat.com>; Eric Auger <eric.au...@redhat.com>; 
Peter Xu <pet...@redhat.com>; Igor Mammedov <imamm...@redhat.com>; Wanghaibin 
(D) <wanghaibin.w...@huawei.com>
主题: Re: [PATCH] acpi_ged: Add ospm_status hook implementation

On Tue, 16 Aug 2022 at 10:26, Keqian Zhu <zhukeqi...@huawei.com> wrote:
>
> This fixes a bug that causes segmentation fault with following dumpstack:
>  #1  0x0000aaaaab64235c in qmp_query_acpi_ospm_status 
> (errp=errp@entry=0xfffffffff030) at ../monitor/qmp-cmds.c:312
>  #2  0x0000aaaaabfc4e20 in qmp_marshal_query_acpi_ospm_status 
> (args=<optimized out>, ret=0xffffea4ffe90, errp=0xffffea4ffe88) at 
> qapi/qapi-commands-acpi.c:63
>  #3  0x0000aaaaabff8ba0 in do_qmp_dispatch_bh (opaque=0xffffea4ffe98) 
> at ../qapi/qmp-dispatch.c:128
>  #4  0x0000aaaaac02e594 in aio_bh_call (bh=0xffffe0004d80) at 
> ../util/async.c:150
>  #5  aio_bh_poll (ctx=ctx@entry=0xaaaaad0f6040) at ../util/async.c:178
>  #6  0x0000aaaaac00bd40 in aio_dispatch (ctx=ctx@entry=0xaaaaad0f6040) 
> at ../util/aio-posix.c:421
>  #7  0x0000aaaaac02e010 in aio_ctx_dispatch (source=0xaaaaad0f6040, 
> callback=<optimized out>, user_data=<optimized out>) at 
> ../util/async.c:320
>  #8  0x0000fffff76f6884 in g_main_context_dispatch () at 
> /usr/lib64/libglib-2.0.so.0
>  #9  0x0000aaaaac0452d4 in glib_pollfds_poll () at 
> ../util/main-loop.c:297
>  #10 os_host_main_loop_wait (timeout=0) at ../util/main-loop.c:320
>  #11 main_loop_wait (nonblocking=nonblocking@entry=0) at 
> ../util/main-loop.c:596
>  #12 0x0000aaaaab5c9e50 in qemu_main_loop () at 
> ../softmmu/runstate.c:734
>  #13 0x0000aaaaab185370 in qemu_main (argc=argc@entry=47, 
> argv=argv@entry=0xfffffffff518, envp=envp@entry=0x0) at 
> ../softmmu/main.c:38
>  #14 0x0000aaaaab16f99c in main (argc=47, argv=0xfffffffff518) at 
> ../softmmu/main.c:47

What are the conditions required to trigger the segfault?


> Fixes: ebb62075021a ("hw/acpi: Add ACPI Generic Event Device Support")
> Signed-off-by: Keqian Zhu <zhukeqi...@huawei.com>
> ---
>  hw/acpi/generic_event_device.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/hw/acpi/generic_event_device.c 
> b/hw/acpi/generic_event_device.c index e28457a7d1..a3d31631fe 100644
> --- a/hw/acpi/generic_event_device.c
> +++ b/hw/acpi/generic_event_device.c
> @@ -267,6 +267,13 @@ static void acpi_ged_unplug_cb(HotplugHandler 
> *hotplug_dev,
>      }
>  }
>
> +static void acpi_ged_ospm_status(AcpiDeviceIf *adev, ACPIOSTInfoList 
> +***list) {
> +    AcpiGedState *s = ACPI_GED(adev);
> +
> +    acpi_memory_ospm_status(&s->memhp_state, list); }
> +
>  static void acpi_ged_send_event(AcpiDeviceIf *adev, 
> AcpiEventStatusBits ev)  {
>      AcpiGedState *s = ACPI_GED(adev); @@ -409,6 +416,7 @@ static void 
> acpi_ged_class_init(ObjectClass *class, void *data)
>      hc->unplug_request = acpi_ged_unplug_request_cb;
>      hc->unplug = acpi_ged_unplug_cb;
>
> +    adevc->ospm_status = acpi_ged_ospm_status;
>      adevc->send_event = acpi_ged_send_event;  }
>
> --

thanks
-- PMM

Reply via email to