pharo icon indicating copy to clipboard operation
pharo copied to clipboard

[Crash] EXCEPTION_ACCESS_VIOLATION in BitBltPlugin.DLL!copyBits from GrafPort>copyBits

Open VincentBlondeau opened this issue 4 years ago • 3 comments

Bug description Playing a bit too much with the image made it crash: crash.dmp.txt

From the analysis of the windows crash dump (can be provided on demand (500MB)):

STACK_TEXT:  
00000000`0073f020 00000000`69bc566d : 00000000`00747f68 00000000`00000001 00000000`6fbe7448 00000000`00000000 : BitBltPlugin!copyBits+0x21eb
00000000`0073f160 00000000`70001658 : 00000000`00000800 00000000`0000092c 00000000`0075fc60 00000000`6fb5e154 : BitBltPlugin!primitiveCopyBits+0x4d
00000000`0073f1a0 00000000`00000800 : 00000000`0000092c 00000000`0075fc60 00000000`6fb5e154 00000000`00000000 : 0x70001658
00000000`0073f1a8 00000000`0000092c : 00000000`0075fc60 00000000`6fb5e154 00000000`00000000 00000000`000186a0 : 0x800
00000000`0073f1b0 00000000`0075fc60 : 00000000`6fb5e154 00000000`00000000 00000000`000186a0 00000000`00000002 : 0x92c
00000000`0073f1b8 00000000`6fb5e154 : 00000000`00000000 00000000`000186a0 00000000`00000002 00000000`0075f218 : 0x75fc60
00000000`0073f1c0 00000000`6fb4d1bc : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : PharoVMCore!getVMGMTOffset+0x56594
00000000`0073f1f0 00000000`70eea378 : 00000000`70eea3d8 00000000`70eea2d8 00000000`70edbfa0 00000000`70edbf60 : PharoVMCore!getVMGMTOffset+0x455fc
00000000`00747fb8 00000000`70eea3d8 : 00000000`70eea2d8 00000000`70edbfa0 00000000`70edbf60 00000000`71755c00 : 0x70eea378
00000000`00747fc0 00000000`70eea2d8 : 00000000`70edbfa0 00000000`70edbf60 00000000`71755c00 00000000`700eaab8 : 0x70eea3d8

To Reproduce Steps I was doing when it happens:

  1. Open a browser with the UML tab open
  2. Try to make the spotter slow and crash I'm not sure it is easy to reproduce

Expected behavior No crash

Version information:

  • OS: win10 Pharo 9.0.0 Build information: Pharo-9.0.0+build.1356.sha.f2e26ea4a61c1d3eb2f0c4024e027d6df3b992f7 (64 Bit)

Expected development cost 🤷‍♂️

Additional context Vanilla Pharo image

VincentBlondeau avatar May 04 '21 10:05 VincentBlondeau

Same here, it just crashes when opening the "UML" tab:

PharoVM version:5.0-Pharo 9.0.15 built on Jun 10 2022 15:52:10 Compiler: 5.4.0 20160609 5.4.0 20160609 [Production Spur 64-bit VM]
Built from: CoInterpreter * VMMaker-tonel.1 uuid: aa6234f4-799d-0d00-90d1-c90e092bce84 Jun 10 2022
 With:StackToRegisterMappingCogit * VMMaker-tonel.1 uuid: aa6234f4-799d-0d00-90d1-c90e092bce84 Jun 10 2022
 Revision: v9.0.15 - Commit: b487900 - Date: 2022-06-02 09:48:57 +0200

C stack backtrace & registers:
	rax 0x00000000 rbx 0x7ffde3cc96e0 rcx 0x0000003b rdx 0x7ffde3cc9520
	rdi 0x01c2b888 rsi 0x01c2b888 rbp 0x0000003b rsp 0x7ffde3cc94d0
	r8  0x7ffde3cc9600 r9  0x00000005 r10 0x00000000 r11 0x00000000
	r12 0x7f5dbbd5c340 r13 0x00000005 r14 0x01c25f10 r15 0x7f5dbbd5c210
	rip 0x7f5dbb829959
*/media/fadimk/DATA/Applications/Pharo/vm/lib/libPharoVMCore.so(+0x29959)[0x7f5dbb829959]
/media/fadimk/DATA/Applications/Pharo/vm/lib/libPharoVMCore.so(+0xc41ec)[0x7f5dbb8c41ec]
/media/fadimk/DATA/Applications/Pharo/vm/lib/libPharoVMCore.so(doReport+0xb5)[0x7f5dbb8c44d5]
/media/fadimk/DATA/Applications/Pharo/vm/lib/libPharoVMCore.so(sigsegv+0x14)[0x7f5dbb8c4544]
/lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7f5dbb61a520]
/media/fadimk/DATA/Applications/Pharo/vm/lib/libPharoVMCore.so(+0x29959)[0x7f5dbb829959]
/media/fadimk/DATA/Applications/Pharo/vm/lib/libffi.so(+0x77ec)[0x7f5dbbd5a7ec]
/media/fadimk/DATA/Applications/Pharo/vm/lib/libffi.so(+0x8050)[0x7f5dbbd5b050]
/media/fadimk/DATA/Applications/Pharo/vm/lib/libSurfacePlugin.so(ioGetSurfaceFormat+0x35)[0x7f5da4601305]
/media/fadimk/DATA/Applications/Pharo/vm/lib/libBitBltPlugin.so(+0x2802)[0x7f5da5402802]
/media/fadimk/DATA/Applications/Pharo/vm/lib/libBitBltPlugin.so(primitiveCopyBits+0x1d)[0x7f5da5406a9d]
[0x1d4de498]
[0x0]

crash.dmp.zip

Using Ubuntu 22.04 LTS x64 w/ native SDL2

fmqa avatar Aug 16 '22 16:08 fmqa

Did some fairly basic debugging work here.

[New Thread 0x7fffe8264640 (LWP 25176)]
[New Thread 0x7fffe17fa640 (LWP 25177)]
[Thread 0x7fffe17fa640 (LWP 25177) exited]
[New Thread 0x7fffe17fa640 (LWP 25178)]

Thread 1 "pharo" received signal SIGSEGV, Segmentation fault.
callbackFrontend (cif=0x69f258, ret=0x7ffffffbd270, args=0x7ffffffbd0e0, cbPtr=0x3b) at /builds/workspace/pharo-vm_pharo-9/repository/ffi/src/callbacks/callbacks.c:24
24	/builds/workspace/pharo-vm_pharo-9/repository/ffi/src/callbacks/callbacks.c: Datei oder Verzeichnis nicht gefunden.
(gdb) bt
#0  callbackFrontend (cif=0x69f258, ret=0x7ffffffbd270, args=0x7ffffffbd0e0, cbPtr=0x3b) at /builds/workspace/pharo-vm_pharo-9/repository/ffi/src/callbacks/callbacks.c:24
#1  0x00007ffff7fb57ec in ?? () from /media/fadimk/DATA/Applications/Pharo/vm/lib/libffi.so
#2  0x00007ffff7fb6050 in ?? () from /media/fadimk/DATA/Applications/Pharo/vm/lib/libffi.so
#3  0x00007fffb2001305 in ioGetSurfaceFormat (surfaceID=<optimized out>, width=width@entry=0x7fffe0e0b988 <sourceWidth>, height=height@entry=0x7fffe0e0b9a8 <sourceHeight>, 
    depth=depth@entry=0x7fffe0e0b9b8 <sourceDepth>, isMSB=isMSB@entry=0x7fffe0e0b99c <sourceMSB>)
    at /builds/workspace/pharo-vm_pharo-9/build-stockReplacement/generated/64/plugins/src/SurfacePlugin/SurfacePlugin.c:201
#4  0x00007fffe0c02802 in loadBitBltFromwarping (bbObj=<optimized out>, aBool=aBool@entry=0)
    at /builds/workspace/pharo-vm_pharo-9/repository/extracted/plugins/BitBltPlugin/src/common/BitBltPlugin.c:3339
#5  0x00007fffe0c06a9d in primitiveCopyBits () at /builds/workspace/pharo-vm_pharo-9/repository/extracted/plugins/BitBltPlugin/src/common/BitBltPlugin.c:5112
#6  0x000000001d4de498 in ?? ()
#7  0x00007fffffffddb0 in ?? ()
#8  0x00007ffff7cadca6 in interpret () at /builds/workspace/pharo-vm_pharo-9/build-stockReplacement/generated/64/vm/src/gcc3x-cointerp.c:2985
#9  0x000000001d4de3d8 in ?? ()
#10 0x000000001e18cdf0 in ?? ()

Stepping into the top frame:

(gdb) f 0
#0  callbackFrontend (cif=0x69f258, ret=0x7ffffffbd270, args=0x7ffffffbd0e0, cbPtr=0x3b) at /builds/workspace/pharo-vm_pharo-9/repository/ffi/src/callbacks/callbacks.c:24
24	/builds/workspace/pharo-vm_pharo-9/repository/ffi/src/callbacks/callbacks.c: Datei oder Verzeichnis nicht gefunden.
(gdb) disassemble 
Dump of assembler code for function callbackFrontend:
   0x00007ffff7c29940 <+0>:	push   %rbp
   0x00007ffff7c29941 <+1>:	push   %rbx
   0x00007ffff7c29942 <+2>:	mov    %rcx,%rbp
   0x00007ffff7c29945 <+5>:	sub    $0x38,%rsp
   0x00007ffff7c29949 <+9>:	mov    %fs:0x28,%rax
   0x00007ffff7c29952 <+18>:	mov    %rax,0x28(%rsp)
   0x00007ffff7c29957 <+23>:	xor    %eax,%eax
=> 0x00007ffff7c29959 <+25>:	mov    (%rcx),%rax
   0x00007ffff7c2995c <+28>:	mov    %rdx,0x10(%rsp)
   0x00007ffff7c29961 <+33>:	mov    %rcx,(%rsp)
   0x00007ffff7c29965 <+37>:	mov    %rsi,0x8(%rsp)
   0x00007ffff7c2996a <+42>:	mov    %rsp,%rsi
   0x00007ffff7c2996d <+45>:	mov    0x18(%rax),%rdx
   0x00007ffff7c29971 <+49>:	mov    %rax,%rdi
   0x00007ffff7c29974 <+52>:	mov    %rdx,0x20(%rsp)
   0x00007ffff7c29979 <+57>:	mov    %rsp,0x18(%rax)
   0x00007ffff7c2997d <+61>:	call   *0x10(%rax)
   0x00007ffff7c29980 <+64>:	mov    %rsp,%rdi
   0x00007ffff7c29983 <+67>:	call   0x7ffff7c21690 <queue_add_pending_callback@plt>
   0x00007ffff7c29988 <+72>:	mov    0x0(%rbp),%rax
   0x00007ffff7c2998c <+76>:	mov    %rsp,%rsi
   0x00007ffff7c2998f <+79>:	mov    %rax,%rdi
   0x00007ffff7c29992 <+82>:	call   *(%rax)
   0x00007ffff7c29994 <+84>:	mov    0x28(%rsp),%rax
   0x00007ffff7c29999 <+89>:	xor    %fs:0x28,%rax
   0x00007ffff7c299a2 <+98>:	jne    0x7ffff7c299ab <callbackFrontend+107>
   0x00007ffff7c299a4 <+100>:	add    $0x38,%rsp
   0x00007ffff7c299a8 <+104>:	pop    %rbx
   0x00007ffff7c299a9 <+105>:	pop    %rbp
   0x00007ffff7c299aa <+106>:	ret    
   0x00007ffff7c299ab <+107>:	call   0x7ffff7c21ab0 <__stack_chk_fail@plt>
End of assembler dump.

IMO it's seem like it's attempting to assign %rax into *cbPtr which is malformed (0x3b is not a valid pointer), thus causing the segfault.

fmqa avatar Aug 16 '22 17:08 fmqa

After some digging, it seems that this was caused by a mismatched/broken libffi version in my case. Restoring the bundled version of libffi and ensuring that it gets loaded fixed this for more. Sorry for the noise.

fmqa avatar Aug 16 '22 18:08 fmqa

I think we can close this " this was caused by a mismatched/broken libffi version"

MarcusDenker avatar Oct 16 '23 10:10 MarcusDenker