Bug#245563: libc6: causes errors on linux-2.6.5 with PaX and CONFIG_PAX_NOVSYSCALL
On Mon, Apr 26, 2004 at 07:34:55PM +0000, Ian Gulliver wrote:
> > What does NOVSYSCALL do? I doubt it disables the vsyscall properly if
> > glibc is trying to use the in-kernel signal trampoline. Glibc CVS does
> > this:
> > if (GLRO(dl_sysinfo_dso) == NULL)
> > {
> > kact.sa_flags |= SA_RESTORER;
> >
> > kact.sa_restorer = ((act->sa_flags & SA_SIGINFO)
> > ? &restore_rt : &restore);
> > }
> >
> > Debian glibc does this:
> >
> > +# if __ASSUME_VSYSCALL == 0
> > kact.sa_flags = act->sa_flags | SA_RESTORER;
> >
> > kact.sa_restorer = ((act->sa_flags & SA_SIGINFO)
> > ? &restore_rt : &restore);
> > +# else
> >
> > __ASSUME_VSYSCALL is not defined so glibc should be setting
> > SA_RESTORER.
>
> We've tracked this a bit further. This seems to be fine in
> /lib/libc-2.3.2.so, but broken in /lib/tls/libc-2.3.2.so which does not
> properly set SA_RESTORER.
OK, I see what's going on. The code in glibc CVS, quoted first above,
will work. The code in our glibc packages, quoted second, won't - for
the TLS packages we assume kernel 2.6.0, which assumes the vsyscall is
present.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
Reply to: