From: Thomas Gleixner <tglx@linutronix.de>
To: Jens Axboe <axboe@kernel.dk>, LKML <linux-kernel@vger.kernel.org>
Cc: Michael Jeanson <mjeanson@efficios.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Peter Zijlstra <peterz@infradead.org>,
"Paul E. McKenney" <paulmck@kernel.org>,
Boqun Feng <boqun.feng@gmail.com>, Wei Liu <wei.liu@kernel.org>,
Sean Christopherson <seanjc@google.com>,
Florian Weimer <fweimer@redhat.com>,
Samuel Thibault <sthibault@debian.org>
Subject: BUG: rseq selftests and librseq vs. glibc fail
Date: Mon, 18 Aug 2025 16:00:27 +0200 [thread overview]
Message-ID: <87frdoybk4.ffs@tglx> (raw)
In-Reply-To: <87y0rh63t0.ffs@tglx>
On Sun, Aug 17 2025 at 23:23, Thomas Gleixner wrote:
> It survives the self test suite after I wasted a day to figure out why
> the selftests reliably segfault on a machine which has debian trixie
> installed. The fix is in the branch.
That's glibc 2.41 FWIW. glibc 2.36 from Debian 12 does not have this
problem.
The fix unfortunately only works with a dynamically linked libc,
statically linked libc fails. The fix is basically a revert of
3bcbc20942db ("selftests/rseq: Play nice with binaries statically linked
against glibc 2.35+")
which introduced these weak libc symbols to make static libc linking work.
I have no idea why this creates havoc, but in GDB I saw that libc
manages to overwrite the TLS of the pthread at some place, but I gave up
decoding it further. If no pthread is created it just works. Removing
this weak muck makes it work too.
It's trivial to reproduce. All it needs is to have in the source:
__weak ptrdiff_t __rseq_offset;
w/o even being referenced and creating a pthread. Reproducer below.
TBH, this interface is a horrible hack. libc should expose a proper
function for querying whether it has registered rseq and return the
parameters in a struct. But well...
Build reproducer with:
# gcc -O2 -Wall -o t test.c
# ./t
Segmentation fault
# gcc -O2 -Wall -o t test.c -static
# ./t
#
Removing the weak __rseq_offset makes the dynamic case work too.
Yours sufficiently grumpy
tglx
----
#define _GNU_SOURCE
#include <pthread.h>
#include <stddef.h>
#define __weak __attribute__((__weak__))
__weak ptrdiff_t __rseq_offset;
static void *foo(void *arg)
{
return NULL;
}
int main(int argc, char **argv)
{
pthread_t t;
pthread_create(&t, NULL, foo, NULL);
pthread_join(t, NULL);
return 0;
}
next prev parent reply other threads:[~2025-08-18 14:00 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-13 16:29 [patch 00/11] rseq: Optimize exit to user space Thomas Gleixner
2025-08-13 16:29 ` [patch 01/11] rseq: Avoid pointless evaluation in __rseq_notify_resume() Thomas Gleixner
2025-08-20 14:23 ` Mathieu Desnoyers
2025-08-13 16:29 ` [patch 02/11] rseq: Condense the inline stubs Thomas Gleixner
2025-08-20 14:24 ` Mathieu Desnoyers
2025-08-13 16:29 ` [patch 03/11] rseq: Rename rseq_syscall() to rseq_debug_syscall_exit() Thomas Gleixner
2025-08-20 14:25 ` Mathieu Desnoyers
2025-08-13 16:29 ` [patch 04/11] rseq: Replace the pointless event mask bit fiddling Thomas Gleixner
2025-08-13 16:29 ` [patch 05/11] rseq: Optimize the signal delivery path Thomas Gleixner
2025-08-13 16:29 ` [patch 06/11] rseq: Optimize exit to user space further Thomas Gleixner
2025-08-13 16:29 ` [patch 07/11] entry: Cleanup header Thomas Gleixner
2025-08-13 17:09 ` Giorgi Tchankvetadze
2025-08-13 21:30 ` Thomas Gleixner
2025-08-13 16:29 ` [patch 08/11] entry: Distinguish between syscall and interrupt exit Thomas Gleixner
2025-08-13 16:29 ` [patch 09/11] entry: Provide exit_to_user_notify_resume() Thomas Gleixner
2025-08-13 16:29 ` [patch 10/11] rseq: Skip fixup when returning from a syscall Thomas Gleixner
2025-08-14 8:54 ` Peter Zijlstra
2025-08-14 13:24 ` Thomas Gleixner
2025-08-13 16:29 ` [patch 11/11] rseq: Convert to masked user access where applicable Thomas Gleixner
2025-08-13 17:45 ` [patch 00/11] rseq: Optimize exit to user space Jens Axboe
2025-08-13 21:32 ` Thomas Gleixner
2025-08-13 21:36 ` Jens Axboe
2025-08-13 22:08 ` Thomas Gleixner
2025-08-17 21:23 ` Thomas Gleixner
2025-08-18 14:00 ` Thomas Gleixner [this message]
2025-08-18 14:15 ` BUG: rseq selftests and librseq vs. glibc fail Florian Weimer
2025-08-18 17:13 ` Thomas Gleixner
2025-08-18 19:33 ` Florian Weimer
2025-08-18 19:46 ` Sean Christopherson
2025-08-18 19:55 ` Florian Weimer
2025-08-18 20:27 ` Sean Christopherson
2025-08-18 23:54 ` Thomas Gleixner
2025-08-19 0:28 ` Sean Christopherson
2025-08-19 6:18 ` Florian Weimer
2025-08-29 18:44 ` Prakash Sangappa
2025-08-29 18:50 ` Mathieu Desnoyers
2025-09-01 19:30 ` Prakash Sangappa
2025-08-18 17:38 ` [patch 00/11] rseq: Optimize exit to user space Michael Jeanson
2025-08-18 20:21 ` Thomas Gleixner
2025-08-18 21:29 ` Michael Jeanson
2025-08-18 23:43 ` Thomas Gleixner
2025-08-20 14:27 ` Mathieu Desnoyers
2025-08-20 14:10 ` Mathieu Desnoyers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87frdoybk4.ffs@tglx \
--to=tglx@linutronix.de \
--cc=axboe@kernel.dk \
--cc=boqun.feng@gmail.com \
--cc=fweimer@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mjeanson@efficios.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=seanjc@google.com \
--cc=sthibault@debian.org \
--cc=wei.liu@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).