Hello, just tried to reproduce this crash.
I got following call stack in gdb with original packages: (gdb) bt #0 0x00002b57561a5c86 in strtouq () from /lib/libc.so.6 #1 0x00002b57561a3712 in atoi () from /lib/libc.so.6 #2 0x000000000045f5fe in dgettext () #3 0x0000000000405778 in __libc_start_main () When rebuilding just noshell: (gdb) bt #0 0x00002ad26562fc86 in strtouq () from /lib/libc.so.6 #1 0x00002ad26562d712 in atoi () from /lib/libc.so.6 #2 0x000000000045f67e in main (argc=5, argv=0x7fff456d13f8, envp=0x7fff456d1428) at runas.c:98 When even rebuilding glibc: Program received signal SIGSEGV, Segmentation fault. *__GI_____strtol_l_internal (nptr=0x7fff0a04fee6 "1000", endptr=0x0, base=10, group=0, loc=0x0) at ../sysdeps/generic/strtol_l.c:239 239 struct locale_data *current = loc->__locales[LC_NUMERIC]; (gdb) bt #0 *__GI_____strtol_l_internal (nptr=0x7fff0a04fee6 "1000", endptr=0x0, base=10, group=0, loc=0x0) at ../sysdeps/generic/strtol_l.c:239 #1 0x00002ac5a0cae712 in atoi (nptr=0x7fff0a04fee6 "1000") at ../stdlib/stdlib.h:333 #2 0x000000000045f67e in main (argc=5, argv=0x7fff0a04dd78, envp=0x7fff0a04dda8) at runas.c:98 It might be related to the link command: gcc -o runas /usr/lib/libc.a -dn stubs.o runas.o The link command seems to do dynamic linking but /usr/lib/libc.a seems to be the static library judging from the size. So either command produces an working executable: gcc -static -o runas /usr/lib/libc.a -dn stubs.o runas.o gcc -o runas /usr/lib/libc_nonshared.a -dn stubs.o runas.o gcc -o runas -dn stubs.o runas.o At least Squeeze contains a Makefile.linux that got the "/usr/lib/libc.a" commented out [1] [2]. So this bug can probably be marked as done. Kind regards, Bernhard [1] https://sources.debian.org/src/titantools/4.0.11-4/Makefile.linux/ [2] https://sources.debian.org/src/titantools/4.0.11+notdfsg1-2/Makefile.linux/ PS.: Was fun, but is there no automatic bug closing when the release, the bug got reported against, is getting unsupported?
# cat /etc/apt/sources.list deb http://snapshot.debian.org/archive/debian/20070920T000000Z/ etch main non-free deb-src http://snapshot.debian.org/archive/debian/20070920T000000Z/ etch main non-free apt-get install noshell gdb dpkg-dev libc6-dbg apt-get build-dep titantools apt-get build-dep glibc # gdb -q --args runas 1000 1000 0022 /bin/bash (no debugging symbols found) Using host libthread_db library "/lib/libthread_db.so.1". (gdb) run Starting program: /usr/sbin/runas 1000 1000 0022 /bin/bash (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) Program received signal SIGSEGV, Segmentation fault. 0x00002b57561a5c86 in strtouq () from /lib/libc.so.6 (gdb) bt #0 0x00002b57561a5c86 in strtouq () from /lib/libc.so.6 #1 0x00002b57561a3712 in atoi () from /lib/libc.so.6 #2 0x000000000045f5fe in dgettext () #3 0x0000000000405778 in __libc_start_main () #4 0x000000000040551a in ?? () #5 0x00007fff54b59878 in ?? () #6 0x0000000000000000 in ?? () (gdb) display/i $pc 1: x/i $pc 0x2b57561a5c86 <strtouq+54>: mov 0x8(%r8),%rdx (gdb) disassemble strtouq Dump of assembler code for function strtouq: 0x00002b57561a5c50 <strtouq+0>: mov 2114209(%rip),%rax # 0x2b57563a9ef8 <_IO_file_jumps+2328> 0x00002b57561a5c57 <strtouq+7>: xor %ecx,%ecx 0x00002b57561a5c59 <strtouq+9>: mov %fs:(%rax),%r8 0x00002b57561a5c5d <strtouq+13>: jmpq 0x2b57561a60a0 <strtoll_l+16> 0x00002b57561a5c62 <strtouq+18>: nop 0x00002b57561a5c63 <strtouq+19>: nop 0x00002b57561a5c64 <strtouq+20>: nop 0x00002b57561a5c65 <strtouq+21>: nop 0x00002b57561a5c66 <strtouq+22>: nop 0x00002b57561a5c67 <strtouq+23>: nop 0x00002b57561a5c68 <strtouq+24>: nop 0x00002b57561a5c69 <strtouq+25>: nop 0x00002b57561a5c6a <strtouq+26>: nop 0x00002b57561a5c6b <strtouq+27>: nop 0x00002b57561a5c6c <strtouq+28>: nop 0x00002b57561a5c6d <strtouq+29>: nop 0x00002b57561a5c6e <strtouq+30>: nop 0x00002b57561a5c6f <strtouq+31>: nop 0x00002b57561a5c70 <strtouq+32>: push %r15 0x00002b57561a5c72 <strtouq+34>: push %r14 0x00002b57561a5c74 <strtouq+36>: mov %r8,%r14 0x00002b57561a5c77 <strtouq+39>: push %r13 0x00002b57561a5c79 <strtouq+41>: mov %edx,%r13d 0x00002b57561a5c7c <strtouq+44>: push %r12 0x00002b57561a5c7e <strtouq+46>: push %rbp 0x00002b57561a5c7f <strtouq+47>: push %rbx 0x00002b57561a5c80 <strtouq+48>: sub $0x28,%rsp 0x00002b57561a5c84 <strtouq+52>: test %ecx,%ecx 0x00002b57561a5c86 <strtouq+54>: mov 0x8(%r8),%rdx (gdb) print/x $r8 $1 = 0x0 mkdir -p noshell/orig cd noshell/orig apt-get source noshell cd .. cp orig/ try1 -a cd try1/titantools-4.0.11/ DEB_BUILD_OPTIONS='nostrip' dpkg-buildpackage -b cd .. dpkg -i noshell_4.0.11-4_amd64.deb # gdb -q --args runas 1000 1000 0022 /bin/bash Using host libthread_db library "/lib/libthread_db.so.1". (gdb) run Starting program: /usr/sbin/runas 1000 1000 0022 /bin/bash Program received signal SIGSEGV, Segmentation fault. 0x00002afb25313c86 in strtouq () from /lib/libc.so.6 (gdb) bt #0 0x00002afb25313c86 in strtouq () from /lib/libc.so.6 #1 0x00002afb25311712 in atoi () from /lib/libc.so.6 #2 0x000000000045f67e in main () cp orig/ try2 -a cd try2/titantools-4.0.11/ nano Makefile.linux -CFLAGS = +CFLAGS = -g DEB_BUILD_OPTIONS='nostrip' dpkg-buildpackage -b cd .. dpkg -i noshell_4.0.11-4_amd64.deb # gdb -q --args runas 1000 1000 0022 /bin/bash Using host libthread_db library "/lib/libthread_db.so.1". (gdb) run Starting program: /usr/sbin/runas 1000 1000 0022 /bin/bash Program received signal SIGSEGV, Segmentation fault. 0x00002ad26562fc86 in strtouq () from /lib/libc.so.6 (gdb) bt #0 0x00002ad26562fc86 in strtouq () from /lib/libc.so.6 #1 0x00002ad26562d712 in atoi () from /lib/libc.so.6 #2 0x000000000045f67e in main (argc=5, argv=0x7fff456d13f8, envp=0x7fff456d1428) at runas.c:98 (gdb) up #1 0x00002ad26562d712 in atoi () from /lib/libc.so.6 (gdb) #2 0x000000000045f67e in main (argc=5, argv=0x7fff456d13f8, envp=0x7fff456d1428) at runas.c:98 98 newGID = atoi(argv[2]); (gdb) print argv[2] $1 = 0x7fff456d1ee4 "1000" apt-get install libc6-dbg # gdb -q --args runas 1000 1000 0022 /bin/bash Using host libthread_db library "/lib/libthread_db.so.1". (gdb) run Starting program: /usr/sbin/runas 1000 1000 0022 /bin/bash Program received signal SIGSEGV, Segmentation fault. 0x00002aec36cb1c86 in ____strtoll_l_internal () from /lib/libc.so.6 (gdb) bt #0 0x00002aec36cb1c86 in ____strtoll_l_internal () from /lib/libc.so.6 #1 0x00002aec36caf712 in atoi () from /lib/libc.so.6 #2 0x000000000045f67e in main (argc=5, argv=0x7fff7404cd78, envp=0x7fff7404cda8) at runas.c:98 mkdir -p libc6/orig cd libc6/orig apt-get source libc6 cd .. cp orig try1 -a cd try1/glibc-2.3.6.ds1 # search for -g1, replace by -g in amd64 and linux related files. DEB_BUILD_OPTIONS='nostrip' dpkg-buildpackage -b cd .. dpkg -i libc6_2.3.6.ds1-13etch2_amd64.deb libc6-dbg_2.3.6.ds1-13etch2_amd64.deb libc6-dev_2.3.6.ds1-13etch2_amd64.deb libc6-dev-i386_2.3.6.ds1-13etch2_amd64.deb libc6-i386_2.3.6.ds1-13etch2_amd64.deb locales_2.3.6.ds1-13etch2_all.deb # gdb -q --args runas 1000 1000 0022 /bin/bash Using host libthread_db library "/lib/libthread_db.so.1". (gdb) b main Breakpoint 1 at 0x45f502: file runas.c, line 42. (gdb) run Starting program: /usr/sbin/runas 1000 1000 0022 /bin/bash Breakpoint 1, main (argc=5, argv=0x7fff0a04dd78, envp=0x7fff0a04dda8) at runas.c:42 42 short errFlag = 0; (gdb) b atoi Breakpoint 2 at 0x2ac5a0cae700: file atoi.c, line 27. (gdb) cont Continuing. Breakpoint 2, atoi (nptr=0x7fff0a04fee6 "1000") at atoi.c:27 27 { (gdb) next 333 return __strtol_internal (__nptr, __endptr, __base, 0); (gdb) step *__GI___strtol_internal (nptr=0x7fff0a04fee6 "1000", endptr=0x0, base=10, group=0) at ../sysdeps/generic/strtol.c:99 99 return INTERNAL (__strtol_l) (nptr, endptr, base, group, _NL_CURRENT_LOCALE); (gdb) *__GI_____strtol_l_internal (nptr=0x7fff0a04fee6 "1000", endptr=0x0, base=10, group=0, loc=0x0) at ../sysdeps/generic/strtol_l.c:225 225 { (gdb) 251 if (__builtin_expect (group, 0)) (gdb) next 239 struct locale_data *current = loc->__locales[LC_NUMERIC]; (gdb) bt #0 *__GI_____strtol_l_internal (nptr=0x7fff0a04fee6 "1000", endptr=0x0, base=10, group=0, loc=0x0) at ../sysdeps/generic/strtol_l.c:239 #1 0x00002ac5a0cae712 in atoi (nptr=0x7fff0a04fee6 "1000") at ../stdlib/stdlib.h:333 #2 0x000000000045f67e in main (argc=5, argv=0x7fff0a04dd78, envp=0x7fff0a04dda8) at runas.c:98 (gdb) next Program received signal SIGSEGV, Segmentation fault. *__GI_____strtol_l_internal (nptr=0x7fff0a04fee6 "1000", endptr=0x0, base=10, group=0, loc=0x0) at ../sysdeps/generic/strtol_l.c:239 239 struct locale_data *current = loc->__locales[LC_NUMERIC]; (gdb) bt #0 *__GI_____strtol_l_internal (nptr=0x7fff0a04fee6 "1000", endptr=0x0, base=10, group=0, loc=0x0) at ../sysdeps/generic/strtol_l.c:239 #1 0x00002ac5a0cae712 in atoi (nptr=0x7fff0a04fee6 "1000") at ../stdlib/stdlib.h:333 #2 0x000000000045f67e in main (argc=5, argv=0x7fff0a04dd78, envp=0x7fff0a04dda8) at runas.c:98 (gdb) display/i $pc 1: x/i $pc 0x2ac5a0cb0c86 <*__GI_____strtol_l_internal+22>: mov 0x8(%r8),%rdx (gdb) disassemble __GI_____strtol_l_internal Dump of assembler code for function ____strtoll_l_internal: 0x00002ac5a0cb0c70 <*__GI_____strtol_l_internal+0>: push %r15 0x00002ac5a0cb0c72 <*__GI_____strtol_l_internal+2>: push %r14 0x00002ac5a0cb0c74 <*__GI_____strtol_l_internal+4>: mov %r8,%r14 0x00002ac5a0cb0c77 <*__GI_____strtol_l_internal+7>: push %r13 0x00002ac5a0cb0c79 <*__GI_____strtol_l_internal+9>: mov %edx,%r13d 0x00002ac5a0cb0c7c <*__GI_____strtol_l_internal+12>: push %r12 0x00002ac5a0cb0c7e <*__GI_____strtol_l_internal+14>: push %rbp 0x00002ac5a0cb0c7f <*__GI_____strtol_l_internal+15>: push %rbx 0x00002ac5a0cb0c80 <*__GI_____strtol_l_internal+16>: sub $0x28,%rsp 0x00002ac5a0cb0c84 <*__GI_____strtol_l_internal+20>: test %ecx,%ecx 0x00002ac5a0cb0c86 <*__GI_____strtol_l_internal+22>: mov 0x8(%r8),%rdx ./glibc-2.3.6.ds1/build-tree/glibc-2.3.6/locale/localeinfo.h:#define _NL_CURRENT_LOCALE ((__locale_t) __libc_tsd_get (LOCALE)) ./glibc-2.3.6.ds1/build-tree/glibc-2.3.6/sysdeps/generic/bits/libc-tsd.h:# define __libc_tsd_get(KEY) (__libc_tsd_##KEY) ./glibc-2.3.6.ds1/build-tree/glibc-2.3.6/sysdeps/generic/bits/libc-tsd.h:# define __libc_tsd_get(KEY) (__libc_tsd_##KEY##_data) ./glibc-2.3.6.ds1/build-tree/glibc-2.3.6/locale/localeinfo.h:__libc_tsd_define (extern, LOCALE) ./glibc-2.3.6.ds1/build-tree/glibc-2.3.6/locale/global-locale.c:__libc_tsd_define (, LOCALE) (gdb) print __libc_tsd_LOCALE Cannot access memory at address 0x18