On Mon, Dec 22, 2025 at 7:34 AM Marc-André Lureau
<[email protected]> wrote:
>
> Hi
>
> On Mon, Dec 22, 2025 at 7:15 PM Joelle van Dyne <[email protected]> wrote:
> >
> > When `owner` == `mr`, `object_unparent` will crash:
> >
> > object_unparent(mr) ->
> > object_property_del_child(mr, mr) ->
> > object_finalize_child_property(mr, name, mr) ->
> > object_unref(mr) ->
> > object_finalize(mr) ->
> > object_property_del_all(mr) ->
> > object_finalize_child_property(mr, name, mr) ->
> > object_unref(mr) ->
> > fail on g_assert(obj->ref > 0)
> >
> > Signed-off-by: Joelle van Dyne <[email protected]>
>
> Fixes: commit 7c092f17 ("virtio-gpu: Handle resource blob commands")
>
> I'd suggest an assert for this case in memory_region_do_init(), as
> that seems undesired.
>
> Reviewed-by: Marc-André Lureau <[email protected]>
>
> > ---
> >  hw/display/virtio-gpu-virgl.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
> > index 18404be5892..4109ff7932a 100644
> > --- a/hw/display/virtio-gpu-virgl.c
> > +++ b/hw/display/virtio-gpu-virgl.c
> > @@ -123,7 +123,7 @@ virtio_gpu_virgl_map_resource_blob(VirtIOGPU *g,
> >      vmr->g = g;
> >
> >      mr = &vmr->mr;
> > -    memory_region_init_ram_ptr(mr, OBJECT(mr), "blob", size, data);
> > +    memory_region_init_ram_ptr(mr, OBJECT(g), "blob", size, data);
> >      memory_region_add_subregion(&b->hostmem, offset, mr);
> >      memory_region_set_enabled(mr, true);
> >
> > --
> > 2.50.1 (Apple Git-155)
> >
> >
>
>
> --
> Marc-André Lureau

So even though this fixed the crash I was seeing, I started getting a
new crash which I debugged with ASAN and found to be a use-after-free
of the virtio_gpu_virgl_hostmem_region. So there may be some bigger
underlying issue.

==22482==ERROR: AddressSanitizer: heap-use-after-free on address
0x612000848eea at pc 0x000103072fbc bp 0x00016d5aad70 sp
0x00016d5aad68
READ of size 1 at 0x612000848eea thread T1
==22482==WARNING: Can't read from symbolizer at fd 211
==22482==WARNING: atos failed to symbolize address "0x103072fb8"
==22482==WARNING: Can't write to symbolizer at fd 211
==22482==WARNING: external symbolizer didn't start up correctly!
==22482==WARNING: Can't write to symbolizer at fd 212
==22482==WARNING: external symbolizer didn't start up correctly!
==22482==WARNING: Can't write to symbolizer at fd 213
==22482==WARNING: external symbolizer didn't start up correctly!
==22482==WARNING: Can't write to symbolizer at fd 215
==22482==WARNING: external symbolizer didn't start up correctly!
==22482==WARNING: Failed to use and restart external symbolizer!
    #0 0x000103072fb8 in address_space_dispatch_free+0x184
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x100796fb8)
    #1 0x00010304e45c in flatview_destroy+0x8c
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x10077245c)
    #2 0x000103e73adc in call_rcu_thread+0x218
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x101597adc)
    #3 0x000103e5e608 in qemu_thread_start+0x168
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x101582608)
    #4 0x000108bbe3f4 in asan_thread_start(void*)+0x4c
(/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/17/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:arm64e+0x3a3f4)
    #5 0x000189f58c04 in _pthread_start+0x84
(/usr/lib/system/libsystem_pthread.dylib:arm64e+0x6c04)
    #6 0x000189f53ba4 in thread_start+0x4
(/usr/lib/system/libsystem_pthread.dylib:arm64e+0x1ba4)

0x612000848eea is located 42 bytes inside of 288-byte region
[0x612000848ec0,0x612000848fe0)
freed by thread T28 here:
    #0 0x000108bc1400 in free+0x7c
(/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/17/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:arm64e+0x3d400)
    #1 0x00010325fefc in virtio_gpu_virgl_unmap_resource_blob+0x118
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x100983efc)
    #2 0x00010325b9c0 in virtio_gpu_virgl_process_cmd+0x21b0
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x10097f9c0)
    #3 0x0001032535ac in virtio_gpu_process_cmdq+0x184
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x1009775ac)
    #4 0x000103e851c8 in aio_bh_poll+0x310
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x1015a91c8)
    #5 0x000103e54cf0 in aio_dispatch+0xc8
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x101578cf0)
    #6 0x000103e87410 in aio_ctx_dispatch+0xc
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x1015ab410)
    #7 0x000107ef1574 in g_main_context_dispatch_unlocked+0xec
(/opt/homebrew/Cellar/glib/2.86.2/lib/libglib-2.0.0.dylib:arm64+0x31574)
    #8 0x000107ef1474 in g_main_context_dispatch+0x28
(/opt/homebrew/Cellar/glib/2.86.2/lib/libglib-2.0.0.dylib:arm64+0x31474)
    #9 0x000103e88198 in main_loop_wait+0x2b0
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x1015ac198)
    #10 0x00010308d9c0 in qemu_main_loop+0xfc
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x1007b19c0)
    #11 0x000103ce6254 in qemu_default_main+0x20
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x10140a254)
    #12 0x000103e5e608 in qemu_thread_start+0x168
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x101582608)
    #13 0x000108bbe3f4 in asan_thread_start(void*)+0x4c
(/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/17/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:arm64e+0x3a3f4)
    #14 0x000189f58c04 in _pthread_start+0x84
(/usr/lib/system/libsystem_pthread.dylib:arm64e+0x6c04)
    #15 0x000189f53ba4 in thread_start+0x4
(/usr/lib/system/libsystem_pthread.dylib:arm64e+0x1ba4)

previously allocated by thread T28 here:
    #0 0x000108bc15fc in calloc+0x80
(/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/17/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:arm64e+0x3d5fc)
    #1 0x000107ef6cac in g_malloc0+0x20
(/opt/homebrew/Cellar/glib/2.86.2/lib/libglib-2.0.0.dylib:arm64+0x36cac)
    #2 0x00010325c1c0 in virtio_gpu_virgl_process_cmd+0x29b0
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x1009801c0)
    #3 0x0001032535ac in virtio_gpu_process_cmdq+0x184
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x1009775ac)
    #4 0x000103258e20 in virtio_gpu_gl_handle_ctrl+0x1f4
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x10097ce20)
    #5 0x000103e85120 in aio_bh_poll+0x268
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x1015a9120)
    #6 0x000103e54cf0 in aio_dispatch+0xc8
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x101578cf0)
    #7 0x000103e87410 in aio_ctx_dispatch+0xc
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x1015ab410)
    #8 0x000107ef1574 in g_main_context_dispatch_unlocked+0xec
(/opt/homebrew/Cellar/glib/2.86.2/lib/libglib-2.0.0.dylib:arm64+0x31574)
    #9 0x000107ef1474 in g_main_context_dispatch+0x28
(/opt/homebrew/Cellar/glib/2.86.2/lib/libglib-2.0.0.dylib:arm64+0x31474)
    #10 0x000103e88198 in main_loop_wait+0x2b0
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x1015ac198)
    #11 0x00010308d9c0 in qemu_main_loop+0xfc
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x1007b19c0)
    #12 0x000103ce6254 in qemu_default_main+0x20
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x10140a254)
    #13 0x000103e5e608 in qemu_thread_start+0x168
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x101582608)
    #14 0x000108bbe3f4 in asan_thread_start(void*)+0x4c
(/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/17/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:arm64e+0x3a3f4)
    #15 0x000189f58c04 in _pthread_start+0x84
(/usr/lib/system/libsystem_pthread.dylib:arm64e+0x6c04)
    #16 0x000189f53ba4 in thread_start+0x4
(/usr/lib/system/libsystem_pthread.dylib:arm64e+0x1ba4)

Thread T1 created by T0 here:
    #0 0x000108bb99d4 in pthread_create+0x5c
(/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/17/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:arm64e+0x359d4)
    #1 0x000103e5e338 in qemu_thread_create+0x18c
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x101582338)
    #2 0x000103e73550 in rcu_init+0x120
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x101597550)
    #3 0x000189bb6cac in invocation function for block in
dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&)
const+0x1b8 (/usr/lib/dyld:arm64e+0x20cac)
    #4 0x000189bf472c in invocation function for block in
dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&,
dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int)
block_pointer, void const*) const+0x140 (/usr/lib/dyld:arm64e+0x5e72c)
    #5 0x000189c1353c in invocation function for block in
mach_o::Header::forEachSection(void (mach_o::Header::SectionInfo
const&, bool&) block_pointer) const+0x134
(/usr/lib/dyld:arm64e+0x7d53c)
    #6 0x000189c10160 in mach_o::Header::forEachLoadCommand(void
(load_command const*, bool&) block_pointer) const+0xcc
(/usr/lib/dyld:arm64e+0x7a160)
    #7 0x000189c119f8 in mach_o::Header::forEachSection(void
(mach_o::Header::SectionInfo const&, bool&) block_pointer) const+0x78
(/usr/lib/dyld:arm64e+0x7b9f8)
    #8 0x000189bf421c in
dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&,
dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int)
block_pointer, void const*) const+0x200 (/usr/lib/dyld:arm64e+0x5e21c)
    #9 0x000189bb6a64 in
dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&)
const+0xa8 (/usr/lib/dyld:arm64e+0x20a64)
    #10 0x000189bbe8ac in
dyld4::JustInTimeLoader::runInitializers(dyld4::RuntimeState&)
const+0x20 (/usr/lib/dyld:arm64e+0x288ac)
    #11 0x000189bb7210 in
dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&,
dyld3::Array<dyld4::Loader const*>&, dyld3::Array<dyld4::Loader
const*>&) const+0x130 (/usr/lib/dyld:arm64e+0x21210)
    #12 0x000189bbbe4c in
dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&)
const::$_0::operator()() const+0xb0 (/usr/lib/dyld:arm64e+0x25e4c)
    #13 0x000189bb752c in
dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&)
const+0x2c8 (/usr/lib/dyld:arm64e+0x2152c)
    #14 0x000189bd9048 in
dyld4::APIs::runAllInitializersForMain()+0x18c
(/usr/lib/dyld:arm64e+0x43048)
    #15 0x000189b9b154 in dyld4::prepare(dyld4::APIs&, mach_o::Header
const*)+0xc24 (/usr/lib/dyld:arm64e+0x5154)
    #16 0x000189b99d00 in start+0x1bbc (/usr/lib/dyld:arm64e+0x3d00)

Thread T28 created by T0 here:
    #0 0x000108bb99d4 in pthread_create+0x5c
(/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/17/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:arm64e+0x359d4)
    #1 0x000103e5e338 in qemu_thread_create+0x18c
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x101582338)
    #2 0x000103ce61a8 in main+0xf0
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x10140a1a8)
    #3 0x000189b99d50 in start+0x1c0c (/usr/lib/dyld:arm64e+0x3d50)

SUMMARY: AddressSanitizer: heap-use-after-free
(/Users/admin/Downloads/build/bin/qemu-system-aarch64:arm64+0x100796fb8)
in address_space_dispatch_free+0x184
Shadow bytes around the buggy address:
  0x612000848c00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x612000848c80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x612000848d00: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
  0x612000848d80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x612000848e00: 00 00 00 00 00 00 00 00 00 00 00 00 fa fa fa fa
=>0x612000848e80: fa fa fa fa fa fa fa fa fd fd fd fd fd[fd]fd fd
  0x612000848f00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x612000848f80: fd fd fd fd fd fd fd fd fd fd fd fd fa fa fa fa
  0x612000849000: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
  0x612000849080: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x612000849100: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==22482==ABORTING

Reply via email to