This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Thorsten Kukuk <kukuk@suse.de> writes:
> Hi,
>
> On AMD64, the nptl/tst-execstack fails with kernel 2.6.0-test9 in
> pthread_barrier_wait (&go_barrier);
>
> strace shows, that one process is doing a mmap, while a second
> process is segfaulting at the same time.
>
> I'm using gcc 3.3.2 and binutils 2.14.90.0.7, all other tests passes.
>
> Does somebody else see this? Is this a kernel problem or a glibc one?
The problem is a bug in dl-execstack. If the mprotect call succeeds
(it does not succeed on the 2.4 Red Hat kernel), then we do not set
dl_stack_flags.
I propose the following patch, it passes the test now. Ok to commit?
Andreas
2003-11-26 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/dl-execstack.c
(_dl_make_stack_executable): Set dl_stack_flags always for
success.
============================================================
Index: sysdeps/unix/sysv/linux/dl-execstack.c
--- sysdeps/unix/sysv/linux/dl-execstack.c 25 Sep 2003 23:04:12 -0000 1.3
+++ sysdeps/unix/sysv/linux/dl-execstack.c 26 Nov 2003 09:39:20 -0000
@@ -40,7 +40,7 @@ _dl_make_stack_executable (void)
{
if (__mprotect ((void *) page, GL(dl_pagesize),
PROT_READ|PROT_WRITE|PROT_EXEC|PROT_GROWSDOWN) == 0)
- return 0;
+ goto return_success;
if (errno != EINVAL)
return errno;
no_growsdown = true;
@@ -91,7 +91,7 @@ _dl_make_stack_executable (void)
{
if (__mprotect ((void *) page, GL(dl_pagesize),
PROT_READ|PROT_WRITE|PROT_EXEC|PROT_GROWSUP) == 0)
- return 0;
+ goto return_success;
if (errno != EINVAL)
return errno;
no_growsup = true;
@@ -132,6 +132,8 @@ _dl_make_stack_executable (void)
# error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP"
#endif
+
+ return_success:
/* Remember that we changed the permission. */
GL(dl_stack_flags) |= PF_X;
--
Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
SuSE Linux AG, Deutschherrnstr. 15-19, 90429 Nürnberg, Germany
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
Attachment:
pgp00000.pgp
Description: PGP signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |