Hello On Tue, 3 Jul 2018 20:57:46 +0200 "W. Martin Borgert" <deba...@debian.org> wrote: > Any more ideas? The workaround with the Jessie chroot is OK, but.. ;~)
A way to get more information would be to install the debug information packages and let simple-scan run by gdb [1]. [1] https://wiki.debian.org/HowToGetABacktrace I suggest these steps: - Add "deb http://debug.mirrors.debian.org/debian-debug/ testing-debug main" to your sources.list - apt update - apt install gdb simple-scan-dbgsym libsane-dbgsym As regular user then: - gdb -q --args simple-scan - cont When the stack smashing happens: - bt - detach - q Also I tried to instect a simple-scan process without having the actual scanner. I gues the problem is inside function Mustek_DMAWrite: 0x00007fffb6db7f40: Mustek_DMAWrite: 354 } // 0x00007fffb6db7f3b <Mustek_DMAWrite+411>: callq 0x7fffb6dabf70 <__stack_chk_fail@plt> 0x00007fffb6db8bf5: Asic_Open: 2444: status = Mustek_DMAWrite (chip, 64, (SANE_Byte *) (temps)); 0x00007fffb6dbcfe0: MustScanner_PowerControl: 298: if (STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) 0x00007fffb6dbfeba: sane_mustek_usb2_open: 565: return MustScanner_PowerControl (isLampOn, isTALampOn); Unfortunately the "stack smashing" is just detected when leaving the function, so the actual problem was somewhere between entering Mustek_DMAWrite and leaving. So if one does not fear gdb and wants to debug that following sequence could lead to the exact location where the stack smashing detection bytes get overwritten: (gdb) print Mustek_DMAWrite $6 = {STATUS (unsigned int, SANE_Byte *, PAsic)} 0x7fffb6db7da0 <Mustek_DMAWrite> # use function address from above (gdb) b *(0x7fffb6db7da0+36) Breakpoint 5 at 0x7fffb6db7dc4: file mustek_usb2_asic.c, line 304. (gdb) cont (gdb) print/x $rsp+0x18 $4 = 0x7fffffffe3c8 # use memory location from above (gdb) watch *0x7fffffffe3c8 Hardware watchpoint 2: *0x7fffffffe3c8 (gdb) cont Continuing. # possibly the watchpoint triggers Hardware watchpoint 2: *0x7fffffffe3c8 Old value = 1953463552 New value = 1953463807 ... # that should show the problematic stack (gdb) bt (gdb) disassemble Mustek_DMAWrite Dump of assembler code for function Mustek_DMAWrite: ... 0x00007fffb6db7db6 <+22>: mov %fs:0x28,%rax # "magic" value loaded to register 0x00007fffb6db7dbf <+31>: mov %rax,0x18(%rsp) # and stored from register to some memory after local variables 0x00007fffb6db7dc4 <+36>: xor %eax,%eax ... # do some useful work ... 0x00007fffb6db7e80 <+224>: xor %fs:0x28,%rcx # compare "magic" to the memory we stored above 0x00007fffb6db7e89 <+233>: mov %r15d,%eax 0x00007fffb6db7e8c <+236>: jne 0x7fffb6db7f3b <Mustek_DMAWrite+411> # if it changed we jump to +411 -> stack smashing detected 0x00007fffb6db7e92 <+242>: add $0x28,%rsp # or if unchanged all is ok -> safe to continue 0x00007fffb6db7e96 <+246>: pop %rbx 0x00007fffb6db7e97 <+247>: pop %rbp 0x00007fffb6db7e98 <+248>: pop %r12 0x00007fffb6db7e9a <+250>: pop %r13 0x00007fffb6db7e9c <+252>: pop %r14 0x00007fffb6db7e9e <+254>: pop %r15 0x00007fffb6db7ea0 <+256>: retq ... 0x00007fffb6db7f3b <+411>: callq 0x7fffb6dabf70 <__stack_chk_fail@plt> End of assembler dump. Kind regards, Bernhard
7f38806a0000-7f38806c7000 r-xp 00000000 fd:01 13110586 /usr/lib/x86_64-linux-gnu/sane/libsane-mustek_usb2.so.1.0.25 *** stack smashing detected ***: simple-scan terminated ======= Backtrace: ========= /usr/lib/x86_64-linux-gnu/sane/libsane-mustek_usb2.so.1(+0xef40)[0x7f38806aef40] /usr/lib/x86_64-linux-gnu/sane/libsane-mustek_usb2.so.1(+0xfbf5)[0x7f38806afbf5] /usr/lib/x86_64-linux-gnu/sane/libsane-mustek_usb2.so.1(+0x13fe0)[0x7f38806b3fe0] /usr/lib/x86_64-linux-gnu/sane/libsane-mustek_usb2.so.1(sane_mustek_usb2_open+0x35a)[0x7f38806b6eba] 0x7f38806b6eba == sane_mustek_usb2_open+0x35a -> sane_mustek_usb2_open == 0x7F38806B6B60 -> offset 0x16B60 ##################### ##################### ##################### ##################### 0x00007fffb6db7f40: Mustek_DMAWrite: 354 } // 0x00007fffb6db7f3b <Mustek_DMAWrite+411>: callq 0x7fffb6dabf70 <__stack_chk_fail@plt> 0x00007fffb6db8bf5: Asic_Open: 2444: status = Mustek_DMAWrite (chip, 64, (SANE_Byte *) (temps)); 0x00007fffb6dbcfe0: MustScanner_PowerControl: 298: if (STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) 0x00007fffb6dbfeba: sane_mustek_usb2_open: 565: return MustScanner_PowerControl (isLampOn, isTALampOn); ##################### ##################### ##################### ##################### nano /etc/apt/sources.list.d/buster.list deb http://debug.mirrors.debian.org/debian-debug/ testing-debug main apt install xserver-xorg sddm openbox dpkg-dev gdb valgrind simple-scan simple-scan-dbgsym libsane-dbg apt source sane-backends export DISPLAY=:0 gdb -q --args simple-scan Reading symbols from simple-scan...Reading symbols from /usr/lib/debug/.build-id/47/ff0748a2b23050c1e376e9721f3638221e9b68.debug...done. done. (gdb) set pagination off (gdb) directory /home/benutzer/sane-backends/sane-backends-1.0.25/backend Source directories searched: /home/benutzer/sane-backends/sane-backends-1.0.25/backend:$cdir:$cwd (gdb) run (gdb) info share mustek_usb2 From To Syms Read Shared Object Library 0x00007fffb6dac210 0x00007fffb6dc4761 Yes /usr/lib/x86_64-linux-gnu/sane/libsane-mustek_usb2.so.1 --------- (gdb) print sane_mustek_usb2_open $1 = {SANE_Status (SANE_String_Const, SANE_Handle *)} 0x7fffb6dbfb60 <sane_mustek_usb2_open> (gdb) disassemble sane_mustek_usb2_open ... 0x00007fffb6dbfeb5 <+853>: callq 0x7fffb6dbcfb0 <MustScanner_PowerControl> 0x00007fffb6dbfeba <+858>: test %eax,%eax ... (gdb) disassemble /m sane_mustek_usb2_open ... 561 static SANE_Bool 562 PowerControl (SANE_Bool isLampOn, SANE_Bool isTALampOn) 563 { 564 DBG (DBG_FUNC, "PowerControl: start\n"); 0x00007fffb6dbfe9e <+830>: lea 0x7fb1(%rip),%rsi # 0x7fffb6dc7e56 0x00007fffb6dbfea5 <+837>: xor %eax,%eax 0x00007fffb6dbfea7 <+839>: mov $0x5,%edi 0x00007fffb6dbfeac <+844>: callq 0x7fffb6db11f0 <sanei_debug_mustek_usb2_call> 565 return MustScanner_PowerControl (isLampOn, isTALampOn); 0x00007fffb6dbfeb1 <+849>: xor %esi,%esi 0x00007fffb6dbfeb3 <+851>: xor %edi,%edi 0x00007fffb6dbfeb5 <+853>: callq 0x7fffb6dbcfb0 <MustScanner_PowerControl> 566 } ... 2090 SANE_Status 2091 sane_open (SANE_String_Const devicename, SANE_Handle * handle) 2092 { ... 2101 if (!PowerControl (SANE_FALSE, SANE_FALSE)) 0x00007fffb6dbfeba <+858>: test %eax,%eax 0x00007fffb6dbfebc <+860>: jne 0x7fffb6dbff08 <sane_mustek_usb2_open+936> 2102 { --------- (gdb) disassemble MustScanner_PowerControl Dump of assembler code for function MustScanner_PowerControl: ... 0x00007fffb6dbcfdb <+43>: callq 0x7fffb6db88d0 <Asic_Open> 0x00007fffb6dbcfe0 <+48>: test %eax,%eax ... (gdb) disassemble /m MustScanner_PowerControl Dump of assembler code for function MustScanner_PowerControl: 295 { ... 297 DBG (DBG_FUNC, "MustScanner_PowerControl: Call in\n"); 0x00007fffb6dbcfb4 <+4>: lea 0xcdad(%rip),%rsi # 0x7fffb6dc9d68 0x00007fffb6dbcfbd <+13>: mov $0x5,%edi 0x00007fffb6dbcfd6 <+38>: callq 0x7fffb6db11f0 <sanei_debug_mustek_usb2_call> 298 if (STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) 0x00007fffb6dbcfdb <+43>: callq 0x7fffb6db88d0 <Asic_Open> 0x00007fffb6dbcfe0 <+48>: test %eax,%eax 0x00007fffb6dbcfe2 <+50>: jne 0x7fffb6dbd070 <MustScanner_PowerControl+192> 299 { --------- (gdb) disassemble Asic_Open ... 0x00007fffb6db8bf0 <+800>: callq 0x7fffb6db7da0 <Mustek_DMAWrite> 0x00007fffb6db8bf5 <+805>: test %eax,%eax ... (gdb) disassemble /m Asic_Open ... 2442 } 2443 2444 status = Mustek_DMAWrite (chip, 64, (SANE_Byte *) (temps)); 0x00007fffb6db8be8 <+792>: mov %rbp,%rsi 0x00007fffb6db8beb <+795>: mov $0x40,%edi 0x00007fffb6db8bf0 <+800>: callq 0x7fffb6db7da0 <Mustek_DMAWrite> 0x00007fffb6db8bf7 <+807>: mov %eax,%r12d 2445 if (status != STATUS_GOOD) ... --------- (gdb) disassemble Mustek_DMAWrite,0x00007fffb6db7f3b+20 Dump of assembler code from 0x7fffb6db7da0 to 0x7fffb6db7f4f: ... 0x00007fffb6db7f3b <Mustek_DMAWrite+411>: callq 0x7fffb6dabf70 <__stack_chk_fail@plt> 0x00007fffb6db7f40 <Mustek_DMARead+0>: push %r15 ... (gdb) disassemble /m Mustek_DMAWrite,0x00007fffb6db7f3b+20 Dump of assembler code from 0x7fffb6db7da0 to 0x7fffb6db7f4f: 253 Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata) 0x00007fffb6db7f40 <Mustek_DMARead+0>: push %r15 ... 354 } 0x00007fffb6db7e7b <Mustek_DMAWrite+219>: mov 0x18(%rsp),%rcx 0x00007fffb6db7e80 <Mustek_DMAWrite+224>: xor %fs:0x28,%rcx 0x00007fffb6db7e89 <Mustek_DMAWrite+233>: mov %r15d,%eax 0x00007fffb6db7e8c <Mustek_DMAWrite+236>: jne 0x7fffb6db7f3b <Mustek_DMAWrite+411> 0x00007fffb6db7e92 <Mustek_DMAWrite+242>: add $0x28,%rsp 0x00007fffb6db7e96 <Mustek_DMAWrite+246>: pop %rbx 0x00007fffb6db7e97 <Mustek_DMAWrite+247>: pop %rbp 0x00007fffb6db7e98 <Mustek_DMAWrite+248>: pop %r12 0x00007fffb6db7e9a <Mustek_DMAWrite+250>: pop %r13 0x00007fffb6db7e9c <Mustek_DMAWrite+252>: pop %r14 0x00007fffb6db7e9e <Mustek_DMAWrite+254>: pop %r15 0x00007fffb6db7ea0 <Mustek_DMAWrite+256>: retq 0x00007fffb6db7ea1 <Mustek_DMAWrite+257>: nopl 0x0(%rax) 0x00007fffb6db7ea8 <Mustek_DMAWrite+264>: mov %r14d,%ebx 0x00007fffb6db7eab <Mustek_DMAWrite+267>: shl $0xf,%ebx 0x00007fffb6db7f3b <Mustek_DMAWrite+411>: callq 0x7fffb6dabf70 <__stack_chk_fail@plt> End of assembler dump. Possibly related: https://gitlab.com/sane-project/backends/issues/new