Hello Jiri Palecek,
I could reproduce this issue also on amd64.
It looks intentional and seems like a security consideration
to make no crash dumps and is caused by this line:
kdesu.cpp:83: prctl(PR_SET_DUMPABLE, 0);
However, you may temporarily add SUID to gdb, then gdb
will run as root and, as far as I see, kdesu still as user.
And the desired breakpoint can be reached.
Attached file demonstrates this.
Kind regards,
Bernhard
# Buster i386 qemu VM 2019-02-07
apt update
apt dist-upgrade
apt install dpkg-dev devscripts xserver-xorg sddm plasma-desktop gdb
kde-cli-tools kde-cli-tools-dbgsym
reboot
mkdir source/kde-cli-tools/orig -p
cd source/kde-cli-tools/orig
apt source kde-cli-tools
cd
mkdir source/libc6/orig -p
cd source/libc6/orig
apt source libc6
cd
export DISPLAY=:0
gdb -q \
-ex 'set width 0' \
-ex 'set pagination off' \
-ex 'directory
/home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu' \
-ex 'directory /home/benutzer/source/libc6/orig/glibc-2.28/sysdeps' \
-ex 'b main' \
-ex 'b SuProcess::exec' \
--args /usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls
###########
benutzer@debian:~$ gdb -q \
> -ex 'set width 0' \
> -ex 'set pagination off' \
> -ex 'directory
> /home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu' \
> -ex 'directory /home/benutzer/source/libc6/orig/glibc-2.28/sysdeps' \
> -ex 'b main' \
> -ex 'b SuProcess::exec' \
> --args /usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls
Reading symbols from /usr/lib/i386-linux-gnu/libexec/kf5/kdesu...Reading
symbols from
/usr/lib/debug/.build-id/d8/59440907cb9b64a346797293b75d544beba51c.debug...done.
done.
Source directories searched:
/home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu:$cdir:$cwd
Source directories searched:
/home/benutzer/source/libc6/orig/glibc-2.28/sysdeps:/home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu:$cdir:$cwd
Breakpoint 1 at 0x4a70: file ./kdesu/kdesu.cpp, line 80.
Breakpoint 2 at 0x4540
(gdb) run
Starting program: /usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".
Breakpoint 1, main (argc=2, argv=0xbffff654) at ./kdesu/kdesu.cpp:80
80 {
(gdb) next
83 prctl(PR_SET_DUMPABLE, 0);
(gdb) step
prctl () at ../sysdeps/unix/syscall-template.S:78
78 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
(gdb) display/i $pc
1: x/i $pc
=> 0xb67d0e50 <prctl>: push %edi
(gdb) stepi
0xb67d0e51 78 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
1: x/i $pc
=> 0xb67d0e51 <prctl+1>: push %esi
(gdb)
0xb67d0e52 78 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
1: x/i $pc
=> 0xb67d0e52 <prctl+2>: push %ebx
(gdb)
0xb67d0e53 78 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
1: x/i $pc
=> 0xb67d0e53 <prctl+3>: mov 0x20(%esp),%edi
(gdb)
0xb67d0e57 78 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
1: x/i $pc
=> 0xb67d0e57 <prctl+7>: mov 0x1c(%esp),%esi
(gdb)
0xb67d0e5b 78 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
1: x/i $pc
=> 0xb67d0e5b <prctl+11>: mov 0x18(%esp),%edx
(gdb)
0xb67d0e5f 78 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
1: x/i $pc
=> 0xb67d0e5f <prctl+15>: mov 0x14(%esp),%ecx
(gdb)
0xb67d0e63 78 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
1: x/i $pc
=> 0xb67d0e63 <prctl+19>: mov 0x10(%esp),%ebx
(gdb)
0xb67d0e67 78 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
1: x/i $pc
=> 0xb67d0e67 <prctl+23>: mov $0xac,%eax
(gdb)
0xb67d0e6c 78 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
1: x/i $pc
=> 0xb67d0e6c <prctl+28>: call *%gs:0x10
(gdb)
0xb7fd4d68 in __kernel_vsyscall ()
1: x/i $pc
=> 0xb7fd4d68 <__kernel_vsyscall>: push %ecx
(gdb)
0xb7fd4d69 in __kernel_vsyscall ()
1: x/i $pc
=> 0xb7fd4d69 <__kernel_vsyscall+1>: push %edx
(gdb)
0xb7fd4d6a in __kernel_vsyscall ()
1: x/i $pc
=> 0xb7fd4d6a <__kernel_vsyscall+2>: push %ebp
(gdb)
0xb7fd4d6b in __kernel_vsyscall ()
1: x/i $pc
=> 0xb7fd4d6b <__kernel_vsyscall+3>: mov %esp,%ebp
(gdb)
0xb7fd4d6d in __kernel_vsyscall ()
1: x/i $pc
=> 0xb7fd4d6d <__kernel_vsyscall+5>: sysenter
(gdb) bt
#0 0xb7fd4d6d in __kernel_vsyscall ()
#1 0xb67d0e73 in prctl () at ../sysdeps/unix/syscall-template.S:78
#2 0x00404aab in main (argc=<optimized out>, argv=0xbffff654) at
./kdesu/kdesu.cpp:83
(gdb) stepi
[1]+ Angehalten gdb -q -ex 'set width 0' -ex 'set pagination off'
-ex 'directory
/home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu' -ex
'directory /home/benutzer/source/libc6/orig/glibc-2.28/sysdeps' -ex 'b main'
-ex 'b SuProcess::exec' --args /usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls
root@debian:~# ps aux | grep -E "gdb|kdesu"
benutzer 14748 1.1 2.7 94280 83116 pts/1 T 11:42 0:00 gdb -q -ex set
width 0 -ex set pagination off -ex directory
/home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu -ex
directory /home/benutzer/source/libc6/orig/glibc-2.28/sysdeps -ex b main -ex b
SuProcess::exec --args /usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls
benutzer 14750 0.0 0.4 70972 12852 pts/1 t 11:42 0:00
/usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls
benutzer@debian:~$ fg
gdb -q -ex 'set width 0' -ex 'set pagination off' -ex 'directory
/home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu' -ex
'directory /home/benutzer/source/libc6/orig/glibc-2.28/sysdeps' -ex 'b main'
-ex 'b SuProcess::exec' --args /usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls
Cannot find user-level thread for LWP 14750: generic error
(gdb) bt
Selected thread is running.
(gdb) kill
Kill the program being debugged? (y or n) y
[Inferior 1 (process 14750) killed]
(gdb) q
##############
gdb -q \
-ex 'set width 0' \
-ex 'set pagination off' \
-ex 'directory
/home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu' \
-ex 'directory /home/benutzer/source/libc6/orig/glibc-2.28/sysdeps' \
-ex 'b SuProcess::exec' \
-ex 'run' \
--args /usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls
benutzer@debian:~$ ls -lisah /usr/lib/i386-linux-gnu/libexec/kf5/kdesu
/usr/bin/gdb
275448 7,3M -rwxr-xr-x 1 root root 7,3M Nov 27 17:08 /usr/bin/gdb
279342 52K -rwxr-xr-x 1 root root 51K Jan 24 13:25
/usr/lib/i386-linux-gnu/libexec/kf5/kdesu
root@debian:~# chmod +s /usr/bin/gdb
benutzer@debian:~$ ls -lisah /usr/lib/i386-linux-gnu/libexec/kf5/kdesu
/usr/bin/gdb
275448 7,3M -rwsr-sr-x 1 root root 7,3M Nov 27 17:08 /usr/bin/gdb
279342 52K -rwxr-xr-x 1 root root 51K Jan 24 13:25
/usr/lib/i386-linux-gnu/libexec/kf5/kdesu
benutzer@debian:~$ gdb -q \
> -ex 'set width 0' \
> -ex 'set pagination off' \
> -ex 'directory
> /home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu' \
> -ex 'directory /home/benutzer/source/libc6/orig/glibc-2.28/sysdeps' \
> -ex 'b SuProcess::exec' \
> -ex 'run' \
> --args /usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls
Reading symbols from /usr/lib/i386-linux-gnu/libexec/kf5/kdesu...Reading
symbols from
/usr/lib/debug/.build-id/d8/59440907cb9b64a346797293b75d544beba51c.debug...done.
done.
Source directories searched:
/home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu:$cdir:$cwd
Source directories searched:
/home/benutzer/source/libc6/orig/glibc-2.28/sysdeps:/home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu:$cdir:$cwd
Breakpoint 1 at 0x4540
Starting program: /usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".
[New Thread 0xb3311b40 (LWP 14782)]
org.kde.kdesu: Daemon not safe (not sgid), not using it.
[Detaching after fork from child process 14783]
Thread 1 "kdesu" hit Breakpoint 1, 0xb7ddea00 in KDESu::SuProcess::exec(char
const*, int)@plt () from /usr/lib/i386-linux-gnu/libKF5Su.so.5
(gdb) bt
#0 0xb7ddea00 in KDESu::SuProcess::exec(char const*, int)@plt () from
/usr/lib/i386-linux-gnu/libKF5Su.so.5
#1 0xb7de8aac in KDESu::SuProcess::checkNeedPassword() () from
/usr/lib/i386-linux-gnu/libKF5Su.so.5
#2 0x00405fff in startApp (p=...) at ./kdesu/kdesu.cpp:378
#3 main (argc=<optimized out>, argv=<optimized out>) at ./kdesu/kdesu.cpp:156
root@debian:~# ps aux | grep -E "gdb|kdesu"
root 14776 6.3 2.7 93452 81992 pts/1 S+ 11:52 0:01 gdb -q -ex set
width 0 -ex set pagination off -ex directory
/home/benutzer/source/kde-cli-tools/orig/kde-cli-tools-5.14.5/kdesu -ex
directory /home/benutzer/source/libc6/orig/glibc-2.28/sysdeps -ex b
SuProcess::exec -ex run --args /usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls
benutzer 14778 0.1 0.6 89392 21164 pts/1 tl 11:52 0:00
/usr/lib/i386-linux-gnu/libexec/kf5/kdesu ls