[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: