Control: reassign -1 libcurl4 7.65.1-1
Control: affects -1 + rtorrent
Control: tags -1 + upstream fixed-upstream
Control: fixed -1 7.65.3-1
Dear Maintainer,
I just tried to find some more information from the given backtrace.
That I guess would translate to something like below [1],
if it would have been done with a debugger and debug symbols.
These stack looks in the last frames similar to these shown in [2] and [3].
And these seem to get fixed upstream in commit [4]
that is in curl-7_65_2 and above.
So in theory the libcurl4 7.65.3-1 from unstable
might not show these segfaults.
Kind regards,
Bernhard
[1]
rtorrent(+0x11e59) [0x4afe59]
| 0x00411e54 0x00411e59 in do_panic(int) at main.cc:596: int stackSize =
backtrace(stackPtrs, 20);
linux-gate.so.1(__kernel_sigreturn+0) [0xb7f92d7c]
| 0xb7fd4d7c <__kernel_sigreturn>
libcurl.so.4(+0x31640) [0xb7e69640]
| 0xb7eab640 in sh_delentry at multi.c:253: dta->sh_entry =
NULL;
libcurl.so.4(+0x328f2) [0xb7e6a8f2]
| 0xb7eac8ed 0xb7eac8f2 in Curl_multi_closed at multi.c:2397
libcurl.so.4(+0x2f7f7) [0xb7e677f7]
| 0xb7ea97f2 0xb7ea97f7 in Curl_closesocket at connect.c:1347
libcurl.so.4(+0x30612) [0xb7e68612]
| 0xb7eaa60d 0xb7eaa612 in trynextip at connect.c:606
libcurl.so.4(+0x30951) [0xb7e68951]
| 0xb7eaa94c 0xb7eaa951 in Curl_is_connected at connect.c:861
libcurl.so.4(+0x33d5c) [0xb7e6bd5c]
| 0xb7eadd57 0xb7eadd5c in multi_runsingle at multi.c:1509
libcurl.so.4(+0x35205) [0xb7e6d205]
| 0xb7eaf200 0xb7eaf205 in multi_socket at multi.c:2564
libcurl.so.4(curl_multi_socket_action+0x2f) [0xb7e6d3af]
| 0xb7eaf3aa 0xb7eaf3af in curl_multi_socket_action at multi.c:2677
rtorrent(+0xda370) [0x578370]
| 0x004da36b 0x004da370 in core::CurlStack::receive_action(core::CurlSocket*,
int) at curl_stack.cc:95
rtorrent(+0xda68c) [0x57868c]
| 0x004da687 0x004da68c in core::CurlStack::receive_timeout() at
curl_stack.cc:171
rtorrent(+0x1341b) [0x4b141b]
| 0x00413418 0x0041341b in std::function<void ()>::operator()() const at
/usr/include/c++/7/bits/std_function.h:706
libtorrent.so.20(_ZN7torrent11thread_base10event_loopEPS0_+0x229) [0xb7d8ec89]
| 0xb7dd0c83 0xb7dd0c89 in std::function<void ()>::operator()() const at
/usr/include/c++/7/bits/std_function.h:706
rtorrent(+0x10b7b) [0x4aeb7b]
| 0x00410b76 0x00410b7b in main(int, char**) at main.cc:480:
torrent::thread_base::event_loop(torrent::main_thread());
libc.so.6(__libc_start_main+0xf1) [0xb77e7b41]
| 0xb7829b3d 0xb7829b41 in __libc_start_main at ../csu/libc-start.c:308
rtorrent(+0x1173b) [0x4af73b]
| 0x00411736 0x0041173b <_start+44>
[2] https://github.com/curl/curl/issues/3995
[3] https://github.com/curl/curl/issues/4057
[4] https://github.com/curl/curl/commit/4981fae7f158152fca01bddb042231f9f8343d58
# Bullseye/testing i386 qemu VM 2019-08-14
apt update
apt dist-upgrade
apt install systemd-coredump gdb mc rtorrent rtorrent-dbgsym
libtorrent20-dbgsym libcurl4-dbgsym
apt build-dep rtorrent
mkdir /home/benutzer/source/rtorrent/orig -p
cd /home/benutzer/source/rtorrent/orig
apt source rtorrent
cd
mkdir /home/benutzer/source/libcurl4/orig -p
cd /home/benutzer/source/libcurl4/orig
apt source libcurl4
cd
gdb -q --args /usr/bin/rtorrent
set width 0
set pagination off
directory /home/benutzer/source/rtorrent/orig/rtorrent-0.9.7/src
set backtrace past-main
display/i $pc
tb main
run
generate-core-file /tmp/core1
gdb -q /usr/bin/rtorrent --core /tmp/core1
set width 0
set pagination off
directory /home/benutzer/source/rtorrent/orig/rtorrent-0.9.7/src
directory /home/benutzer/source/libcurl4/orig/curl-7.65.1/lib
set backtrace past-main
display/i $pc
b * _start+44
b * __libc_start_main+237
b * main+3654
b * _ZN7torrent11thread_base10event_loopEPS0_+0x223
b * client_perform+280
b * core::CurlStack::receive_timeout+39
b * core::CurlStack::receive_action(core::CurlSocket*, int)+91
b * curl_multi_socket_action+42
b * multi_socket+624
b * multi_runsingle+2103
b * Curl_is_connected+748
b * trynextip+189
b * Curl_closesocket+66
b * Curl_multi_closed+125
b * sh_delentry+48
b * __kernel_sigreturn+0
b * do_panic(int)+164
############
# From submitter:
rtorrent(+0x11e59) [0x4afe59]
| 0x00411e54 0x00411e59 in do_panic(int) at main.cc:596: int stackSize =
backtrace(stackPtrs, 20);
linux-gate.so.1(__kernel_sigreturn+0) [0xb7f92d7c]
| 0xb7fd4d7c <__kernel_sigreturn>
libcurl.so.4(+0x31640) [0xb7e69640]
| 0xb7eab640 in sh_delentry at multi.c:253: dta->sh_entry =
NULL;
libcurl.so.4(+0x328f2) [0xb7e6a8f2]
| 0xb7eac8ed 0xb7eac8f2 in Curl_multi_closed at multi.c:2397
libcurl.so.4(+0x2f7f7) [0xb7e677f7]
| 0xb7ea97f2 0xb7ea97f7 in Curl_closesocket at connect.c:1347
libcurl.so.4(+0x30612) [0xb7e68612]
| 0xb7eaa60d 0xb7eaa612 in trynextip at connect.c:606
libcurl.so.4(+0x30951) [0xb7e68951]
| 0xb7eaa94c 0xb7eaa951 in Curl_is_connected at connect.c:861
libcurl.so.4(+0x33d5c) [0xb7e6bd5c]
| 0xb7eadd57 0xb7eadd5c in multi_runsingle at multi.c:1509
libcurl.so.4(+0x35205) [0xb7e6d205]
| 0xb7eaf200 0xb7eaf205 in multi_socket at multi.c:2564
libcurl.so.4(curl_multi_socket_action+0x2f) [0xb7e6d3af]
| 0xb7eaf3aa 0xb7eaf3af in curl_multi_socket_action at multi.c:2677
rtorrent(+0xda370) [0x578370]
| 0x004da36b 0x004da370 in core::CurlStack::receive_action(core::CurlSocket*,
int) at curl_stack.cc:95
rtorrent(+0xda68c) [0x57868c]
| 0x004da687 0x004da68c in core::CurlStack::receive_timeout() at
curl_stack.cc:171
rtorrent(+0x1341b) [0x4b141b]
| 0x00413418 0x0041341b in std::function<void ()>::operator()() const at
/usr/include/c++/7/bits/std_function.h:706
libtorrent.so.20(_ZN7torrent11thread_base10event_loopEPS0_+0x229) [0xb7d8ec89]
| 0xb7dd0c83 0xb7dd0c89 in std::function<void ()>::operator()() const at
/usr/include/c++/7/bits/std_function.h:706
rtorrent(+0x10b7b) [0x4aeb7b]
| 0x00410b76 0x00410b7b in main(int, char**) at main.cc:480:
torrent::thread_base::event_loop(torrent::main_thread());
libc.so.6(__libc_start_main+0xf1) [0xb77e7b41]
| 0xb7829b3d 0xb7829b41 in __libc_start_main at ../csu/libc-start.c:308
rtorrent(+0x1173b) [0x4af73b]
| 0x00411736 0x0041173b <_start+44>
0x4b141b - 0x4af73b = 0x1CE0
0x4af73b + 0x1CE0 = 0x4B141B
0x0041173b + 0x1CE0 = 0x0041341B
0x57868c - 0x4af73b = 0xC8F51
0x4af73b + 0xC8F51 = 0x57868C
0x0041173b + 0xC8F51 = 0x004DA68C
0x578370 - 0x4af73b = 0xC8C35
0x4af73b + 0xC8C35 = 0x578370
0x0041173b + 0xC8C35 = 0x004DA370
0x4afe59 - 0x4af73b = 0x71E
0x4af73b + 0x71E = 0x4AFE59
0x0041173b + 0x71E = 0x00411E59
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x00411736 <_start+44>
2 breakpoint keep y 0xb7829b3d in __libc_start_main at
../csu/libc-start.c:308
3 breakpoint keep y 0x00410b76 in main(int, char**) at main.cc:480
4 breakpoint keep y 0xb7dd0c83 in std::function<void
()>::operator()() const at /usr/include/c++/7/bits/std_function.h:706
5 breakpoint keep y 0x00413418 in std::function<void
()>::operator()() const at /usr/include/c++/7/bits/std_function.h:706
6 breakpoint keep y 0x004da687 in
core::CurlStack::receive_timeout() at curl_stack.cc:171
7 breakpoint keep y 0x004da36b in
core::CurlStack::receive_action(core::CurlSocket*, int) at curl_stack.cc:95
8 breakpoint keep y 0xb7eaf3aa in curl_multi_socket_action at
multi.c:2677
9 breakpoint keep y 0xb7eaf200 in multi_socket at multi.c:2564
10 breakpoint keep y 0xb7eadd57 in multi_runsingle at multi.c:1509
11 breakpoint keep y 0xb7eaa94c in Curl_is_connected at connect.c:861
12 breakpoint keep y 0xb7eaa60d in trynextip at connect.c:606
13 breakpoint keep y 0xb7ea97f2 in Curl_closesocket at connect.c:1347
14 breakpoint keep y 0xb7eac8ed in Curl_multi_closed at multi.c:2397
15 breakpoint keep y 0xb7eab640 in sh_delentry at multi.c:253
16 breakpoint keep y 0xb7fd4d7c <__kernel_sigreturn>
17 breakpoint keep y 0x00411e54 in do_panic(int) at main.cc:596
(gdb) disassemble sh_delentry
Dump of assembler code for function sh_delentry:
...
0xb7eab639 <+41>: call 0xb7eaade0 <Curl_llist_remove>
0xb7eab63e <+46>: mov (%esi),%edx
0xb7eab640 <+48>: movl $0x0,0x24(%ebp)
0xb7eab647 <+55>: add $0x10,%esp
0xb7eab64a <+58>: test %edx,%edx
...
End of assembler dump.
https://github.com/curl/curl/issues/3995
https://github.com/curl/curl/issues/4057
https://github.com/curl/curl/commit/4981fae7f158152fca01bddb042231f9f8343d58