mirror of
https://sourceware.org/git/glibc.git
synced 2026-01-06 11:51:29 +03:00
libio: Set _vtable_offset before calling _IO_link_in [BZ #32148]
Since _IO_vtable_offset is used to detect the old binaries, set it in _IO_old_file_init_internal before calling _IO_link_in which checks _IO_vtable_offset. Add a glibc 2.0 test with copy relocation on _IO_stderr_@GLIBC_2.0 to verify that fopen won't cause memory corruption. This fixes BZ #32148. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
This commit is contained in:
@@ -103,9 +103,11 @@ _IO_old_file_init_internal (struct _IO_FILE_plus *fp)
|
||||
fp->file._old_offset = _IO_pos_BAD;
|
||||
fp->file._flags |= CLOSED_FILEBUF_FLAGS;
|
||||
|
||||
_IO_link_in (fp);
|
||||
/* NB: _vtable_offset must be set before calling _IO_link_in since
|
||||
_IO_vtable_offset is used to detect the old binaries. */
|
||||
fp->file._vtable_offset = ((int) sizeof (struct _IO_FILE)
|
||||
- (int) sizeof (struct _IO_FILE_complete));
|
||||
_IO_link_in (fp);
|
||||
fp->file._fileno = -1;
|
||||
|
||||
if (&_IO_stdin_used != NULL || !_IO_legacy_file ((FILE *) fp))
|
||||
|
||||
Reference in New Issue
Block a user