mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
libio: freopen of default streams crashes in old programs [BZ #24632]
As seen with very old i386 GCC binaries.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2019-06-12 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
[BZ #24632]
|
||||||
|
* libio/libioP.h (_IO_JUMPS_FUNC_UPDATE): New macro.
|
||||||
|
* libio/freopen.c (freopen): Use it.
|
||||||
|
|
||||||
2019-06-12 Florian Weimer <fweimer@redhat.com>
|
2019-06-12 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
Linux: Deprecate sysctl.
|
Linux: Deprecate sysctl.
|
||||||
|
@ -62,7 +62,7 @@ freopen (const char *filename, const char *mode, FILE *fp)
|
|||||||
to the old libio may be passed into shared C library and wind
|
to the old libio may be passed into shared C library and wind
|
||||||
up here. */
|
up here. */
|
||||||
_IO_old_file_close_it (fp);
|
_IO_old_file_close_it (fp);
|
||||||
_IO_JUMPS_FILE_plus (fp) = &_IO_old_file_jumps;
|
_IO_JUMPS_FUNC_UPDATE (fp, &_IO_old_file_jumps);
|
||||||
result = _IO_old_file_fopen (fp, gfilename, mode);
|
result = _IO_old_file_fopen (fp, gfilename, mode);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -108,9 +108,14 @@
|
|||||||
(IO_validate_vtable \
|
(IO_validate_vtable \
|
||||||
(*(struct _IO_jump_t **) ((void *) &_IO_JUMPS_FILE_plus (THIS) \
|
(*(struct _IO_jump_t **) ((void *) &_IO_JUMPS_FILE_plus (THIS) \
|
||||||
+ (THIS)->_vtable_offset)))
|
+ (THIS)->_vtable_offset)))
|
||||||
|
# define _IO_JUMPS_FUNC_UPDATE(THIS, VTABLE) \
|
||||||
|
(*(const struct _IO_jump_t **) ((void *) &_IO_JUMPS_FILE_plus (THIS) \
|
||||||
|
+ (THIS)->_vtable_offset) = (VTABLE))
|
||||||
# define _IO_vtable_offset(THIS) (THIS)->_vtable_offset
|
# define _IO_vtable_offset(THIS) (THIS)->_vtable_offset
|
||||||
#else
|
#else
|
||||||
# define _IO_JUMPS_FUNC(THIS) (IO_validate_vtable (_IO_JUMPS_FILE_plus (THIS)))
|
# define _IO_JUMPS_FUNC(THIS) (IO_validate_vtable (_IO_JUMPS_FILE_plus (THIS)))
|
||||||
|
# define _IO_JUMPS_FUNC_UPDATE(THIS, VTABLE) \
|
||||||
|
(_IO_JUMPS_FILE_plus (THIS) = (VTABLE))
|
||||||
# define _IO_vtable_offset(THIS) 0
|
# define _IO_vtable_offset(THIS) 0
|
||||||
#endif
|
#endif
|
||||||
#define _IO_WIDE_JUMPS_FUNC(THIS) _IO_WIDE_JUMPS(THIS)
|
#define _IO_WIDE_JUMPS_FUNC(THIS) _IO_WIDE_JUMPS(THIS)
|
||||||
|
Reference in New Issue
Block a user