[PATCH] libio: Disable vtable validation in case of interposition [BZ #23313]
Florian Weimer
fweimer@redhat.com
Fri Jun 22 10:51:00 GMT 2018
On 06/22/2018 12:15 PM, Szabolcs Nagy wrote:
> On 21/06/18 22:20, Florian Weimer wrote:
>>> +/* Some variants of libstdc++ interpose _IO_2_1_stdin_ etc. and
>>> +Â Â install their own vtables directly, without calling _IO_init or
>>> +  other functions. Detect this by looking at the vtables values
>>> +  during startup, and disable vtable validation in this case. */
>>> +__attribute__ ((constructor))
>>> +static void
>>> +check_stdfiles_vtables (void)
>>> +{
>>> +Â if (_IO_2_1_stdin_.vtable != &_IO_file_jumps
>>> +Â Â Â Â Â || _IO_2_1_stdout_.vtable != &_IO_file_jumps
>>> +Â Â Â Â Â || _IO_2_1_stderr_.vtable != &_IO_file_jumps)
>>> +Â Â Â IO_set_accept_foreign_vtables (&_IO_vtable_check);
>>> +}
>>
>> Any comments on this?
>>
>
> is this useful to do with static linking too?
> (i'd assume ctor ordering is not well defined then
> so stdio access can happen before this check)
>
> with dynamic linking the check looks ok to me
> (i did not think about the copy relocation issue)
Right. I don't think we need to support static linking for backwards
compatibility with these old libraries, so I'll â#ifndef SHAREDâ around
the constructor.
Thanks,
Florian
More information about the Libc-alpha
mailing list