[PATCH v2] libio: use PTR_MANGLE/PTR_DEMANGLE for FILE vtables
Florian Weimer
fweimer@redhat.com
Thu Oct 15 17:43:00 GMT 2015
On 10/15/2015 06:16 PM, Florian Weimer wrote:
> If we can detect that a binary references these symbols:
>
> _IO_file_init@GLIBC_2.1
> _IO_init@GLIBC_2.0
> _IO_str_init_readonly@GLIBC_2.0
> _IO_str_init_static@GLIBC_2.0
>
> we can disable vtable hardening globally. This would not cover the
> scenario where the binary dlopens something that uses an old libstdc++
> (linked statically or dynamically) later, but it would provide
> compatibility where a copy of libstdc++ is pulled in through DT_NEEDED.
This just occurred to me:
If we use the array-of-vtables approach I mentioned earlier (a range
check on the vtable pointer, as opposed to PTR_MANGLE/PTR_DEMANGLE), we
could enable that until one of the functions list above is called. As a
result, we would have both vtable hardening *and* full backwards
compatibility.
We just need a safe way to store the flag and reset it if needed (see
the previous thread, “Encoding page size in the ELF header” :-). For a
start, we could simply use a global variable.
And the change adds more than one instruction, we should benchmark a few
functions like fread_unlocked or fflush_unlocked to see if it has
measurable impact.
Florian
More information about the Libc-alpha
mailing list