Crash when sculpting with a texture, deleting the image of the texture and exiting sculpt mode #106872

Open
opened 2023-04-12 19:02:17 +02:00 by Robin Hohnsbeen · 6 comments
Contributor

System Information
Operating system: Windows 10
Graphics card: RTX 2070 Super

Blender Version
Broken: version: 3.4, 3.5, 3.6
Broken: version: 3.3.3, branch: master, commit date: 2023-01-17 08:40, hash: rB8d94aeb604fa
Broken: 3.1.0
Worked: 3.0.1
Worked: 2.93 LTS

Caused by 9111ea78ac

Short description of error
Blender crashes when a texture image is deleted and you exit sculpt mode.

Exact steps for others to reproduce the error
You can test it inside the attached blend file. I basically just attached an image to a sculpting brush.

  1. Open the blend file below
  2. draw on the surface of the sphere
  3. delete the image inside the outliner
  4. exit sculpt mode

Crash occurs because item->image->runtime.cache_mutex is null inside BKE_image_pool_free

Stack trace:
blender.exe         :0x00007FF713D04C10  pthread_mutex_lock
blender.exe         :0x00007FF70E6EE880  BKE_image_pool_free
blender.exe         :0x00007FF70E6B5CF0  BKE_sculptsession_free
blender.exe         :0x00007FF70F1B67A0  ED_object_sculptmode_exit_ex
blender.exe         :0x00007FF70F1B85F0  sculpt_mode_toggle_exec
blender.exe         :0x00007FF70E953220  wm_operator_invoke
blender.exe         :0x00007FF70E9528D0  wm_operator_call_internal
blender.exe         :0x00007FF70E955880  WM_operator_name_call_ptr
blender.exe         :0x00007FF70F171800  ED_object_mode_set_ex
blender.exe         :0x00007FF70F148710  object_mode_set_exec
blender.exe         :0x00007FF70E953220  wm_operator_invoke
**System Information** Operating system: Windows 10 Graphics card: RTX 2070 Super **Blender Version** Broken: version: 3.4, 3.5, 3.6 Broken: version: 3.3.3, branch: master, commit date: 2023-01-17 08:40, hash: `rB8d94aeb604fa` Broken: 3.1.0 Worked: 3.0.1 Worked: 2.93 LTS Caused by 9111ea78ac **Short description of error** Blender crashes when a texture image is deleted and you exit sculpt mode. **Exact steps for others to reproduce the error** You can test it inside the attached blend file. I basically just attached an image to a sculpting brush. 1. Open the blend file below 2. draw on the surface of the sphere 3. delete the image inside the outliner 4. exit sculpt mode Crash occurs because `item->image->runtime.cache_mutex` is null inside `BKE_image_pool_free` ``` Stack trace: blender.exe :0x00007FF713D04C10 pthread_mutex_lock blender.exe :0x00007FF70E6EE880 BKE_image_pool_free blender.exe :0x00007FF70E6B5CF0 BKE_sculptsession_free blender.exe :0x00007FF70F1B67A0 ED_object_sculptmode_exit_ex blender.exe :0x00007FF70F1B85F0 sculpt_mode_toggle_exec blender.exe :0x00007FF70E953220 wm_operator_invoke blender.exe :0x00007FF70E9528D0 wm_operator_call_internal blender.exe :0x00007FF70E955880 WM_operator_name_call_ptr blender.exe :0x00007FF70F171800 ED_object_mode_set_ex blender.exe :0x00007FF70F148710 object_mode_set_exec blender.exe :0x00007FF70E953220 wm_operator_invoke ```
Robin Hohnsbeen added the
Priority
Normal
Status
Needs Triage
Type
Report
labels 2023-04-12 19:02:17 +02:00

Seems like a long standing issue and repros back to at least 3.3 LTS (2.93 LTS is fine).

Seems like a long standing issue and repros back to at least 3.3 LTS (2.93 LTS is fine).
Jesse Yurkovich added
Module
Sculpt, Paint & Texture
Status
Confirmed
and removed
Status
Needs Triage
labels 2023-04-13 01:09:55 +02:00
Member

Caused by 9111ea78ac

Got a fix.

Caused by 9111ea78acf457c27655dbdd7e7fd9d221db67e0 Got a fix.
Philipp Oeser self-assigned this 2023-04-13 10:26:54 +02:00
Member

Since 9111ea78ac, BKE_image_pool_free would access ImagePoolItem image->runtime.cache_mutex [which could be NULL after deleting the Image ID from the Outliner]

It would appear that the following diff fixes it in release builds, but still getting heap-use-after-free in a debug build:

diff --git a/source/blender/blenkernel/intern/image.cc b/source/blender/blenkernel/intern/image.cc
index 205b08deeb7..46150cf448c 100644
--- a/source/blender/blenkernel/intern/image.cc
+++ b/source/blender/blenkernel/intern/image.cc
@@ -4838,7 +4838,7 @@ void BKE_image_pool_free(ImagePool *pool)
   for (ImagePoolItem *item = static_cast<ImagePoolItem *>(pool->image_buffers.first);
        item != nullptr;
        item = item->next) {
-    if (item->ibuf != nullptr) {
+    if (item->image->runtime.cache_mutex != nullptr && item->ibuf != nullptr) {
       BLI_mutex_lock(static_cast<ThreadMutex *>(item->image->runtime.cache_mutex));
       IMB_freeImBuf(item->ibuf);
       BLI_mutex_unlock(static_cast<ThreadMutex *>(item->image->runtime.cache_mutex));
==1360026==ERROR: AddressSanitizer: heap-use-after-free on address 0x61b000194a88 at pc 0x000000cc1775 bp 0x7ffd5a284180 sp 0x7ffd5a284178
READ of size 8 at 0x61b000194a88 thread T0
    #0 0xcc1774 in BKE_image_pool_free /blender/source/blender/blenkernel/intern/image.cc:4841
    #1 0x13c153a in BKE_sculptsession_free /blender/source/blender/blenkernel/intern/paint.cc:1513
    #2 0x9a32852 in ED_object_sculptmode_exit_ex /blender/source/blender/editors/sculpt_paint/sculpt_ops.cc:464
    #3 0x9a32c74 in sculpt_mode_toggle_exec /blender/source/blender/editors/sculpt_paint/sculpt_ops.cc:505
    #4 0x3c63d70 in wm_operator_invoke /blender/source/blender/windowmanager/intern/wm_event_system.cc:1539
    #5 0x3c65465 in wm_operator_call_internal /blender/source/blender/windowmanager/intern/wm_event_system.cc:1727
    #6 0x3c656ca in WM_operator_name_call_ptr /blender/source/blender/windowmanager/intern/wm_event_system.cc:1775
    #7 0x9286744 in ED_object_mode_set_ex /blender/source/blender/editors/object/object_modes.cc:215
    #8 0x9263999 in object_mode_set_exec /blender/source/blender/editors/object/object_edit.cc:1774
    #9 0x3c63d70 in wm_operator_invoke /blender/source/blender/windowmanager/intern/wm_event_system.cc:1539
    #10 0x3c65465 in wm_operator_call_internal /blender/source/blender/windowmanager/intern/wm_event_system.cc:1727
    #11 0x3c656ca in WM_operator_name_call_ptr /blender/source/blender/windowmanager/intern/wm_event_system.cc:1775
    #12 0x3c66bdd in WM_operator_name_call_ptr_with_depends_on_cursor /blender/source/blender/windowmanager/intern/wm_event_system.cc:1968
    #13 0x9ff4ecd in ui_apply_but_funcs_after /blender/source/blender/editors/interface/interface_handlers.cc:1021
    #14 0xa087089 in ui_handler_region_menu /blender/source/blender/editors/interface/interface_handlers.cc:11449
    #15 0x3c5c512 in wm_handler_ui_call /blender/source/blender/windowmanager/intern/wm_event_system.cc:814
    #16 0x3c7620e in wm_handlers_do_intern /blender/source/blender/windowmanager/intern/wm_event_system.cc:3305
    #17 0x3c775c5 in wm_handlers_do /blender/source/blender/windowmanager/intern/wm_event_system.cc:3422
    #18 0x3c81afb in wm_event_do_handlers /blender/source/blender/windowmanager/intern/wm_event_system.cc:4044
    #19 0x3c3a2d6 in WM_main /blender/source/blender/windowmanager/intern/wm.c:646
    #20 0x93fff1 in main /blender/source/creator/creator.c:594
    #21 0x7f9655e4a50f in __libc_start_call_main (/lib64/libc.so.6+0x2750f)
    #22 0x7f9655e4a5c8 in __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x275c8)
    #23 0x93eee4 in _start (/build_linux_debug/bin/blender+0x93eee4)

0x61b000194a88 is located 1544 bytes inside of 1568-byte region [0x61b000194480,0x61b000194aa0)
freed by thread T0 here:
    #0 0x7f965dab9388 in __interceptor_free.part.0 (/lib64/libasan.so.8+0xb9388)
    #1 0x1fd0bc54 in MEM_lockfree_freeN /blender/intern/guardedalloc/intern/mallocn_lockfree_impl.c:102
    #2 0xe69ee8 in BKE_id_free_ex /blender/source/blender/blenkernel/intern/lib_id_delete.c:168
    #3 0xe6bcd1 in id_delete /blender/source/blender/blenkernel/intern/lib_id_delete.c:363
    #4 0xe6c044 in BKE_id_multi_tagged_delete /blender/source/blender/blenkernel/intern/lib_id_delete.c:386
    #5 0xb3d1e66 in outliner_id_operation_exec /blender/source/blender/editors/space_outliner/outliner_tools.cc:2799
    #6 0x3cfe026 in WM_menu_invoke_ex /blender/source/blender/windowmanager/intern/wm_operators.c:1043
    #7 0x3cfe3d8 in WM_menu_invoke /blender/source/blender/windowmanager/intern/wm_operators.c:1063
    #8 0x3c6370b in wm_operator_invoke /blender/source/blender/windowmanager/intern/wm_event_system.cc:1527
    #9 0x3c65465 in wm_operator_call_internal /blender/source/blender/windowmanager/intern/wm_event_system.cc:1727
    #10 0x3c656ca in WM_operator_name_call_ptr /blender/source/blender/windowmanager/intern/wm_event_system.cc:1775
    #11 0x3c66bdd in WM_operator_name_call_ptr_with_depends_on_cursor /blender/source/blender/windowmanager/intern/wm_event_system.cc:1968
    #12 0x9ff4ecd in ui_apply_but_funcs_after /blender/source/blender/editors/interface/interface_handlers.cc:1021
    #13 0xa087cd1 in ui_popup_handler /blender/source/blender/editors/interface/interface_handlers.cc:11539
    #14 0x3c5c512 in wm_handler_ui_call /blender/source/blender/windowmanager/intern/wm_event_system.cc:814
    #15 0x3c7620e in wm_handlers_do_intern /blender/source/blender/windowmanager/intern/wm_event_system.cc:3305
    #16 0x3c775c5 in wm_handlers_do /blender/source/blender/windowmanager/intern/wm_event_system.cc:3422
    #17 0x3c81afb in wm_event_do_handlers /blender/source/blender/windowmanager/intern/wm_event_system.cc:4044
    #18 0x3c3a2d6 in WM_main /blender/source/blender/windowmanager/intern/wm.c:646
    #19 0x93fff1 in main /blender/source/creator/creator.c:594
    #20 0x7f9655e4a50f in __libc_start_call_main (/lib64/libc.so.6+0x2750f)

previously allocated by thread T0 here:
    #0 0x7f965daba097 in calloc (/lib64/libasan.so.8+0xba097)
    #1 0x1fd0c389 in MEM_lockfree_callocN /blender/intern/guardedalloc/intern/mallocn_lockfree_impl.c:208
    #2 0x10934617 in DNA_struct_reconstruct /blender/source/blender/makesdna/intern/dna_genfile.c:1233
    #3 0x3e7f2eb in read_struct /blender/source/blender/blenloader/intern/readfile.cc:1744
    #4 0x3e901db in read_libblock /blender/source/blender/blenloader/intern/readfile.cc:3274
    #5 0x3e98f62 in blo_read_file_internal /blender/source/blender/blenloader/intern/readfile.cc:3885
    #6 0x3e6b37d in BLO_read_from_file /blender/source/blender/blenloader/intern/readblenentry.cc:407
    #7 0x95eabb in BKE_blendfile_read /blender/source/blender/blenkernel/intern/blendfile.cc:588
    #8 0x3ca4fe1 in WM_file_read /blender/source/blender/windowmanager/intern/wm_files.cc:977
    #9 0x3cb1b63 in wm_file_read_opwrap /blender/source/blender/windowmanager/intern/wm_files.cc:2646
    #10 0x3cb2b84 in wm_open_mainfile__open /blender/source/blender/windowmanager/intern/wm_files.cc:2768
    #11 0x3cb1ef5 in operator_state_dispatch /blender/source/blender/windowmanager/intern/wm_files.cc:2682
    #12 0x3cb2de2 in wm_open_mainfile_dispatch /blender/source/blender/windowmanager/intern/wm_files.cc:2792
    #13 0x3cb21b5 in wm_open_mainfile__discard_changes /blender/source/blender/windowmanager/intern/wm_files.cc:2721
    #14 0x3cb1ef5 in operator_state_dispatch /blender/source/blender/windowmanager/intern/wm_files.cc:2682
    #15 0x3cb2de2 in wm_open_mainfile_dispatch /blender/source/blender/windowmanager/intern/wm_files.cc:2792
    #16 0x3cb2e0b in wm_open_mainfile_invoke /blender/source/blender/windowmanager/intern/wm_files.cc:2797
    #17 0x3c6370b in wm_operator_invoke /blender/source/blender/windowmanager/intern/wm_event_system.cc:1527
    #18 0x3c655c5 in wm_operator_call_internal /blender/source/blender/windowmanager/intern/wm_event_system.cc:1761
    #19 0x3c656ca in WM_operator_name_call_ptr /blender/source/blender/windowmanager/intern/wm_event_system.cc:1775
    #20 0x3c66bdd in WM_operator_name_call_ptr_with_depends_on_cursor /blender/source/blender/windowmanager/intern/wm_event_system.cc:1968
    #21 0x9ff4ecd in ui_apply_but_funcs_after /blender/source/blender/editors/interface/interface_handlers.cc:1021
    #22 0xa087cd1 in ui_popup_handler /blender/source/blender/editors/interface/interface_handlers.cc:11539
    #23 0x3c5c512 in wm_handler_ui_call /blender/source/blender/windowmanager/intern/wm_event_system.cc:814
    #24 0x3c7620e in wm_handlers_do_intern /blender/source/blender/windowmanager/intern/wm_event_system.cc:3305
    #25 0x3c775c5 in wm_handlers_do /blender/source/blender/windowmanager/intern/wm_event_system.cc:3422
    #26 0x3c81afb in wm_event_do_handlers /blender/source/blender/windowmanager/intern/wm_event_system.cc:4044
    #27 0x3c3a2d6 in WM_main /blender/source/blender/windowmanager/intern/wm.c:646
    #28 0x93fff1 in main /blender/source/creator/creator.c:594
    #29 0x7f9655e4a50f in __libc_start_call_main (/lib64/libc.so.6+0x2750f)

SUMMARY: AddressSanitizer: heap-use-after-free /blender/source/blender/blenkernel/intern/image.cc:4841 in BKE_image_pool_free
Shadow bytes around the buggy address:
  0x0c368002a900: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c368002a910: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c368002a920: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c368002a930: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c368002a940: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
=>0x0c368002a950: fd[fd]fd fd fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c368002a960: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c368002a970: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c368002a980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c368002a990: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c368002a9a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==1360026==ABORTING

@Sergey would probably know better

Since 9111ea78acf457c27655dbdd7e7fd9d221db67e0, `BKE_image_pool_free` would access `ImagePoolItem` `image->runtime.cache_mutex` [which could be NULL after deleting the Image ID from the Outliner] It would appear that the following diff fixes it in release builds, but still getting `heap-use-after-free` in a debug build: ```diff diff --git a/source/blender/blenkernel/intern/image.cc b/source/blender/blenkernel/intern/image.cc index 205b08deeb7..46150cf448c 100644 --- a/source/blender/blenkernel/intern/image.cc +++ b/source/blender/blenkernel/intern/image.cc @@ -4838,7 +4838,7 @@ void BKE_image_pool_free(ImagePool *pool) for (ImagePoolItem *item = static_cast<ImagePoolItem *>(pool->image_buffers.first); item != nullptr; item = item->next) { - if (item->ibuf != nullptr) { + if (item->image->runtime.cache_mutex != nullptr && item->ibuf != nullptr) { BLI_mutex_lock(static_cast<ThreadMutex *>(item->image->runtime.cache_mutex)); IMB_freeImBuf(item->ibuf); BLI_mutex_unlock(static_cast<ThreadMutex *>(item->image->runtime.cache_mutex)); ``` ``` ==1360026==ERROR: AddressSanitizer: heap-use-after-free on address 0x61b000194a88 at pc 0x000000cc1775 bp 0x7ffd5a284180 sp 0x7ffd5a284178 READ of size 8 at 0x61b000194a88 thread T0 #0 0xcc1774 in BKE_image_pool_free /blender/source/blender/blenkernel/intern/image.cc:4841 #1 0x13c153a in BKE_sculptsession_free /blender/source/blender/blenkernel/intern/paint.cc:1513 #2 0x9a32852 in ED_object_sculptmode_exit_ex /blender/source/blender/editors/sculpt_paint/sculpt_ops.cc:464 #3 0x9a32c74 in sculpt_mode_toggle_exec /blender/source/blender/editors/sculpt_paint/sculpt_ops.cc:505 #4 0x3c63d70 in wm_operator_invoke /blender/source/blender/windowmanager/intern/wm_event_system.cc:1539 #5 0x3c65465 in wm_operator_call_internal /blender/source/blender/windowmanager/intern/wm_event_system.cc:1727 #6 0x3c656ca in WM_operator_name_call_ptr /blender/source/blender/windowmanager/intern/wm_event_system.cc:1775 #7 0x9286744 in ED_object_mode_set_ex /blender/source/blender/editors/object/object_modes.cc:215 #8 0x9263999 in object_mode_set_exec /blender/source/blender/editors/object/object_edit.cc:1774 #9 0x3c63d70 in wm_operator_invoke /blender/source/blender/windowmanager/intern/wm_event_system.cc:1539 #10 0x3c65465 in wm_operator_call_internal /blender/source/blender/windowmanager/intern/wm_event_system.cc:1727 #11 0x3c656ca in WM_operator_name_call_ptr /blender/source/blender/windowmanager/intern/wm_event_system.cc:1775 #12 0x3c66bdd in WM_operator_name_call_ptr_with_depends_on_cursor /blender/source/blender/windowmanager/intern/wm_event_system.cc:1968 #13 0x9ff4ecd in ui_apply_but_funcs_after /blender/source/blender/editors/interface/interface_handlers.cc:1021 #14 0xa087089 in ui_handler_region_menu /blender/source/blender/editors/interface/interface_handlers.cc:11449 #15 0x3c5c512 in wm_handler_ui_call /blender/source/blender/windowmanager/intern/wm_event_system.cc:814 #16 0x3c7620e in wm_handlers_do_intern /blender/source/blender/windowmanager/intern/wm_event_system.cc:3305 #17 0x3c775c5 in wm_handlers_do /blender/source/blender/windowmanager/intern/wm_event_system.cc:3422 #18 0x3c81afb in wm_event_do_handlers /blender/source/blender/windowmanager/intern/wm_event_system.cc:4044 #19 0x3c3a2d6 in WM_main /blender/source/blender/windowmanager/intern/wm.c:646 #20 0x93fff1 in main /blender/source/creator/creator.c:594 #21 0x7f9655e4a50f in __libc_start_call_main (/lib64/libc.so.6+0x2750f) #22 0x7f9655e4a5c8 in __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x275c8) #23 0x93eee4 in _start (/build_linux_debug/bin/blender+0x93eee4) 0x61b000194a88 is located 1544 bytes inside of 1568-byte region [0x61b000194480,0x61b000194aa0) freed by thread T0 here: #0 0x7f965dab9388 in __interceptor_free.part.0 (/lib64/libasan.so.8+0xb9388) #1 0x1fd0bc54 in MEM_lockfree_freeN /blender/intern/guardedalloc/intern/mallocn_lockfree_impl.c:102 #2 0xe69ee8 in BKE_id_free_ex /blender/source/blender/blenkernel/intern/lib_id_delete.c:168 #3 0xe6bcd1 in id_delete /blender/source/blender/blenkernel/intern/lib_id_delete.c:363 #4 0xe6c044 in BKE_id_multi_tagged_delete /blender/source/blender/blenkernel/intern/lib_id_delete.c:386 #5 0xb3d1e66 in outliner_id_operation_exec /blender/source/blender/editors/space_outliner/outliner_tools.cc:2799 #6 0x3cfe026 in WM_menu_invoke_ex /blender/source/blender/windowmanager/intern/wm_operators.c:1043 #7 0x3cfe3d8 in WM_menu_invoke /blender/source/blender/windowmanager/intern/wm_operators.c:1063 #8 0x3c6370b in wm_operator_invoke /blender/source/blender/windowmanager/intern/wm_event_system.cc:1527 #9 0x3c65465 in wm_operator_call_internal /blender/source/blender/windowmanager/intern/wm_event_system.cc:1727 #10 0x3c656ca in WM_operator_name_call_ptr /blender/source/blender/windowmanager/intern/wm_event_system.cc:1775 #11 0x3c66bdd in WM_operator_name_call_ptr_with_depends_on_cursor /blender/source/blender/windowmanager/intern/wm_event_system.cc:1968 #12 0x9ff4ecd in ui_apply_but_funcs_after /blender/source/blender/editors/interface/interface_handlers.cc:1021 #13 0xa087cd1 in ui_popup_handler /blender/source/blender/editors/interface/interface_handlers.cc:11539 #14 0x3c5c512 in wm_handler_ui_call /blender/source/blender/windowmanager/intern/wm_event_system.cc:814 #15 0x3c7620e in wm_handlers_do_intern /blender/source/blender/windowmanager/intern/wm_event_system.cc:3305 #16 0x3c775c5 in wm_handlers_do /blender/source/blender/windowmanager/intern/wm_event_system.cc:3422 #17 0x3c81afb in wm_event_do_handlers /blender/source/blender/windowmanager/intern/wm_event_system.cc:4044 #18 0x3c3a2d6 in WM_main /blender/source/blender/windowmanager/intern/wm.c:646 #19 0x93fff1 in main /blender/source/creator/creator.c:594 #20 0x7f9655e4a50f in __libc_start_call_main (/lib64/libc.so.6+0x2750f) previously allocated by thread T0 here: #0 0x7f965daba097 in calloc (/lib64/libasan.so.8+0xba097) #1 0x1fd0c389 in MEM_lockfree_callocN /blender/intern/guardedalloc/intern/mallocn_lockfree_impl.c:208 #2 0x10934617 in DNA_struct_reconstruct /blender/source/blender/makesdna/intern/dna_genfile.c:1233 #3 0x3e7f2eb in read_struct /blender/source/blender/blenloader/intern/readfile.cc:1744 #4 0x3e901db in read_libblock /blender/source/blender/blenloader/intern/readfile.cc:3274 #5 0x3e98f62 in blo_read_file_internal /blender/source/blender/blenloader/intern/readfile.cc:3885 #6 0x3e6b37d in BLO_read_from_file /blender/source/blender/blenloader/intern/readblenentry.cc:407 #7 0x95eabb in BKE_blendfile_read /blender/source/blender/blenkernel/intern/blendfile.cc:588 #8 0x3ca4fe1 in WM_file_read /blender/source/blender/windowmanager/intern/wm_files.cc:977 #9 0x3cb1b63 in wm_file_read_opwrap /blender/source/blender/windowmanager/intern/wm_files.cc:2646 #10 0x3cb2b84 in wm_open_mainfile__open /blender/source/blender/windowmanager/intern/wm_files.cc:2768 #11 0x3cb1ef5 in operator_state_dispatch /blender/source/blender/windowmanager/intern/wm_files.cc:2682 #12 0x3cb2de2 in wm_open_mainfile_dispatch /blender/source/blender/windowmanager/intern/wm_files.cc:2792 #13 0x3cb21b5 in wm_open_mainfile__discard_changes /blender/source/blender/windowmanager/intern/wm_files.cc:2721 #14 0x3cb1ef5 in operator_state_dispatch /blender/source/blender/windowmanager/intern/wm_files.cc:2682 #15 0x3cb2de2 in wm_open_mainfile_dispatch /blender/source/blender/windowmanager/intern/wm_files.cc:2792 #16 0x3cb2e0b in wm_open_mainfile_invoke /blender/source/blender/windowmanager/intern/wm_files.cc:2797 #17 0x3c6370b in wm_operator_invoke /blender/source/blender/windowmanager/intern/wm_event_system.cc:1527 #18 0x3c655c5 in wm_operator_call_internal /blender/source/blender/windowmanager/intern/wm_event_system.cc:1761 #19 0x3c656ca in WM_operator_name_call_ptr /blender/source/blender/windowmanager/intern/wm_event_system.cc:1775 #20 0x3c66bdd in WM_operator_name_call_ptr_with_depends_on_cursor /blender/source/blender/windowmanager/intern/wm_event_system.cc:1968 #21 0x9ff4ecd in ui_apply_but_funcs_after /blender/source/blender/editors/interface/interface_handlers.cc:1021 #22 0xa087cd1 in ui_popup_handler /blender/source/blender/editors/interface/interface_handlers.cc:11539 #23 0x3c5c512 in wm_handler_ui_call /blender/source/blender/windowmanager/intern/wm_event_system.cc:814 #24 0x3c7620e in wm_handlers_do_intern /blender/source/blender/windowmanager/intern/wm_event_system.cc:3305 #25 0x3c775c5 in wm_handlers_do /blender/source/blender/windowmanager/intern/wm_event_system.cc:3422 #26 0x3c81afb in wm_event_do_handlers /blender/source/blender/windowmanager/intern/wm_event_system.cc:4044 #27 0x3c3a2d6 in WM_main /blender/source/blender/windowmanager/intern/wm.c:646 #28 0x93fff1 in main /blender/source/creator/creator.c:594 #29 0x7f9655e4a50f in __libc_start_call_main (/lib64/libc.so.6+0x2750f) SUMMARY: AddressSanitizer: heap-use-after-free /blender/source/blender/blenkernel/intern/image.cc:4841 in BKE_image_pool_free Shadow bytes around the buggy address: 0x0c368002a900: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x0c368002a910: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x0c368002a920: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x0c368002a930: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x0c368002a940: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd =>0x0c368002a950: fd[fd]fd fd fa fa fa fa fa fa fa fa fa fa fa fa 0x0c368002a960: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c368002a970: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c368002a980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c368002a990: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c368002a9a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 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 ==1360026==ABORTING ``` @Sergey would probably know better
Philipp Oeser removed their assignment 2023-04-13 11:28:58 +02:00

The image itself is removed, so the item->image can not be de-referenced.

One of the options is to limit the image pool to only be available during a stroke, and dispose it at the end of the stroke. It will solve those dangling pointers problem. The downside is that technically it causes extra lookup at the first pixel of the step of a stroke. I am not sure artists will notice a difference, but it needs to be tested. The testing can be done by clearing the tex_pool in the sculpt_stroke_done().

Alternatively maybe it is possible to forbid deletion of ID when in painting mode.

Or somehow maintain a list of pools and remove entries from them when image datablock is removed. But such complex solution is something I'd try to avoid.

The image itself is removed, so the `item->image` can not be de-referenced. One of the options is to limit the image pool to only be available during a stroke, and dispose it at the end of the stroke. It will solve those dangling pointers problem. The downside is that technically it causes extra lookup at the first pixel of the step of a stroke. I am not sure artists will notice a difference, but it needs to be tested. The testing can be done by clearing the `tex_pool` in the `sculpt_stroke_done()`. Alternatively maybe it is possible to forbid deletion of ID when in painting mode. Or somehow maintain a list of pools and remove entries from them when image datablock is removed. But such complex solution is something I'd try to avoid.

Shouldn't SculptSession data be handled as part of object_foreach_id anyway? This struct stores other ID pointers too, like the scene one...

Shouldn't `SculptSession` data be handled as part of `object_foreach_id` anyway? This struct stores other ID pointers too, like the `scene` one...
Bastien Montagne added
Type
Bug
and removed
Type
Report
labels 2023-04-18 15:19:42 +02:00

The SculptSession perhaps. It is a bit confusing how bad things are w.r.t removed IDs as many of them are re-assigned at the beginning of a stroke.

That being said, I don't think ImagePool should be covered by any of foreach-id.

The `SculptSession` perhaps. It is a bit confusing how bad things are w.r.t removed IDs as many of them are re-assigned at the beginning of a stroke. That being said, I don't think `ImagePool` should be covered by any of foreach-id.
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
5 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#106872
No description provided.