[Bug 2007796] [NEW] glibc __read_chk not a cancellation point
jandryuk
2007796 at bugs.launchpad.net
Mon Feb 20 02:11:36 UTC 2023
Public bug reported:
I'm working with Xen and libxenstore. libxenstore, when using a
"watch", spawns a pthread (read_thread). When libxenstore shuts down,
it pthread_cancel()s and pthread_join()s the "watch" thread.
That thread never exits and the process shutdown hangs.
read_threads is sitting in __read_chk(). In glibc 2.35, __read_chk is
not a cancellation point, so the thread never reacts to the
cancellation.
Upstream glibc fixed it in 2.36 in
https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=dc30acf20bd635d71cd4c84100e842fdf0429e48
Here's the 2.35 disassembly - the lack of __pthread_enable_asynccancel() indicates the missing cancellation support:
(gdb) disassemble
Dump of assembler code for function __read_chk:
0x00007ffff7ea04d0 <+0>: endbr64
0x00007ffff7ea04d4 <+4>: cmp %rcx,%rdx
0x00007ffff7ea04d7 <+7>: ja 0x7ffff7ea0504 <__read_chk+52>
0x00007ffff7ea04d9 <+9>: xor %eax,%eax
0x00007ffff7ea04db <+11>: syscall
=> 0x00007ffff7ea04dd <+13>: cmp $0xfffffffffffff000,%rax
0x00007ffff7ea04e3 <+19>: ja 0x7ffff7ea04f0 <__read_chk+32>
0x00007ffff7ea04e5 <+21>: ret
0x00007ffff7ea04e6 <+22>: cs nopw 0x0(%rax,%rax,1)
0x00007ffff7ea04f0 <+32>: mov 0xe3919(%rip),%rdx # 0x7ffff7f83e10
0x00007ffff7ea04f7 <+39>: neg %eax
0x00007ffff7ea04f9 <+41>: mov %eax,%fs:(%rdx)
0x00007ffff7ea04fc <+44>: mov $0xffffffffffffffff,%rax
0x00007ffff7ea0503 <+51>: ret
0x00007ffff7ea0504 <+52>: push %rax
0x00007ffff7ea0505 <+53>: call 0x7ffff7ea00b0 <__GI___chk_fail>
End of assembler dump.
ProblemType: Bug
DistroRelease: Ubuntu 22.04
Package: libc6 2.35-0ubuntu3.1
ProcVersionSignature: Ubuntu 5.15.0-60.66-generic 5.15.78
Uname: Linux 5.15.0-60-generic x86_64
ApportVersion: 2.20.11-0ubuntu82.3
Architecture: amd64
CasperMD5CheckResult: unknown
CurrentDesktop: XFCE
Date: Sun Feb 19 21:03:32 2023
EcryptfsInUse: Yes
InstallationDate: Installed on 2012-12-06 (3727 days ago)
InstallationMedia: Ubuntu 12.10 "Quantal Quetzal" - Release amd64 (20121017.5)
SourcePackage: glibc
UpgradeStatus: Upgraded to jammy on 2022-07-24 (210 days ago)
** Affects: glibc (Ubuntu)
Importance: Undecided
Status: New
** Tags: amd64 apport-bug jammy
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to glibc in Ubuntu.
https://bugs.launchpad.net/bugs/2007796
Title:
glibc __read_chk not a cancellation point
Status in glibc package in Ubuntu:
New
Bug description:
I'm working with Xen and libxenstore. libxenstore, when using a
"watch", spawns a pthread (read_thread). When libxenstore shuts down,
it pthread_cancel()s and pthread_join()s the "watch" thread.
That thread never exits and the process shutdown hangs.
read_threads is sitting in __read_chk(). In glibc 2.35, __read_chk is
not a cancellation point, so the thread never reacts to the
cancellation.
Upstream glibc fixed it in 2.36 in
https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=dc30acf20bd635d71cd4c84100e842fdf0429e48
Here's the 2.35 disassembly - the lack of __pthread_enable_asynccancel() indicates the missing cancellation support:
(gdb) disassemble
Dump of assembler code for function __read_chk:
0x00007ffff7ea04d0 <+0>: endbr64
0x00007ffff7ea04d4 <+4>: cmp %rcx,%rdx
0x00007ffff7ea04d7 <+7>: ja 0x7ffff7ea0504 <__read_chk+52>
0x00007ffff7ea04d9 <+9>: xor %eax,%eax
0x00007ffff7ea04db <+11>: syscall
=> 0x00007ffff7ea04dd <+13>: cmp $0xfffffffffffff000,%rax
0x00007ffff7ea04e3 <+19>: ja 0x7ffff7ea04f0 <__read_chk+32>
0x00007ffff7ea04e5 <+21>: ret
0x00007ffff7ea04e6 <+22>: cs nopw 0x0(%rax,%rax,1)
0x00007ffff7ea04f0 <+32>: mov 0xe3919(%rip),%rdx # 0x7ffff7f83e10
0x00007ffff7ea04f7 <+39>: neg %eax
0x00007ffff7ea04f9 <+41>: mov %eax,%fs:(%rdx)
0x00007ffff7ea04fc <+44>: mov $0xffffffffffffffff,%rax
0x00007ffff7ea0503 <+51>: ret
0x00007ffff7ea0504 <+52>: push %rax
0x00007ffff7ea0505 <+53>: call 0x7ffff7ea00b0 <__GI___chk_fail>
End of assembler dump.
ProblemType: Bug
DistroRelease: Ubuntu 22.04
Package: libc6 2.35-0ubuntu3.1
ProcVersionSignature: Ubuntu 5.15.0-60.66-generic 5.15.78
Uname: Linux 5.15.0-60-generic x86_64
ApportVersion: 2.20.11-0ubuntu82.3
Architecture: amd64
CasperMD5CheckResult: unknown
CurrentDesktop: XFCE
Date: Sun Feb 19 21:03:32 2023
EcryptfsInUse: Yes
InstallationDate: Installed on 2012-12-06 (3727 days ago)
InstallationMedia: Ubuntu 12.10 "Quantal Quetzal" - Release amd64 (20121017.5)
SourcePackage: glibc
UpgradeStatus: Upgraded to jammy on 2022-07-24 (210 days ago)
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/2007796/+subscriptions
More information about the foundations-bugs
mailing list