From 4e8a6346cd3da2d88bbad745a1769260d36f2783 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Fri, 1 Jun 2018 10:41:03 +0200 Subject: libio: Avoid _allocate_buffer, _free_buffer function pointers [BZ #23236] These unmangled function pointers reside on the heap and could be targeted by exploit writers, effectively bypassing libio vtable validation. Instead, we ignore these pointers and always call malloc or free. In theory, this is a backwards-incompatible change, but using the global heap instead of the user-supplied callback functions should have little application impact. (The old libstdc++ implementation exposed this functionality via a public, undocumented constructor in its strstreambuf class.) --- libio/vasprintf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libio/vasprintf.c') diff --git a/libio/vasprintf.c b/libio/vasprintf.c index 08218ddbe7..6c35d2b108 100644 --- a/libio/vasprintf.c +++ b/libio/vasprintf.c @@ -54,8 +54,8 @@ _IO_vasprintf (char **result_ptr, const char *format, va_list args) _IO_JUMPS (&sf._sbf) = &_IO_str_jumps; _IO_str_init_static_internal (&sf, string, init_string_size, string); sf._sbf._f._flags &= ~_IO_USER_BUF; - sf._s._allocate_buffer = (_IO_alloc_type) malloc; - sf._s._free_buffer = (_IO_free_type) free; + sf._s._allocate_buffer_unused = (_IO_alloc_type) malloc; + sf._s._free_buffer_unused = (_IO_free_type) free; ret = _IO_vfprintf (&sf._sbf._f, format, args); if (ret < 0) { -- cgit v1.2.3