Thread (10 messages) flat view 10 messages, 6 authors, 2007-07-07

Re: Executing from readablee, no-exec pages

From: Segher Boessenkool <hidden>
Date: 2007-07-06 13:24:38

As revealed by the recent "Prevent data exception in kernel
space" patch, versions of glibc prior to 2.4[1] assume that,
Are you sure that this hasn't been fixed somewhere in the 2.3
series, too?
on powerpc32, they can execute out of any readable mapping,
regardless of whether it is marked for execution.  This happens
in the elf_machine_load_address() function.

To maintain compatibility with these versions, we could change
the test in do_page_fault() to include VM_READ as well as VM_EXEC
on targets that don't have a separate exec-bit in hardware (are
there any powerpc mmus that do?).  However, Segher suggested on
IRC that we may want to drop compatibility with those old versions
of glibc, and that I should seek your input.
"drop compatibility" -- this sounds worse than it is, this is all
about supporting a badly broken application.

I wonder how this works with 32-bit userland on a 64-bit kernel,
or with older kernels.  With arch/ppc/ an exec fault would do
the read checks IIRC, maybe we need to change to that.
Personally, I'd rather stick the VM_READ in there, partially for
selfish reasons (our root filesystems are based on older glibcs),
and because it seems a little too soon to deprecate glibc 2.3,
Oh I don't know, can't we just deprecate glibc completely?  ;-)
but also because in the absence of hardware support, the VM_EXEC
check will be nondeterministic, kicking in only when the first
fault for a page is to execute.
I don't think that is a big concern.
[1] It's possible that there are other instances of this in 2.4 and  
that the actual version is newer; I ran into obnoxious cross  
compilation issues trying to try it.  However,
<rant>"Trying to try it" sounds like compiling glibc, indeed.</rant>
<rant>
Glibc already has target-specific code/headers; if you need to know  
something that you'd otherwise need a runs-on-the-target autoconf  
test for, why not just stick it in such a target-specific header?   
In this case, it was trying to figure out the size of "long double".
</rant>
You can do a test like this by cross-compiling some code, and looking
at the size of the symbol in the resulting object file.  Well that's
all off-topic here.


Segher
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help