glibc/libio
Adhemerval Zanella cc683f7ed4 libio: Free backup area when it not required (BZ#22415)
Some libio operations fail to correctly free the backup area (created
by _IO_{w}default_pbackfail on unget{w}c) resulting in either invalid
buffer free operations or memory leaks.

For instance, on the example provided by BZ#22415 a following
fputc after a fseek to rewind the stream issues an invalid free on
the buffer.  It is because although _IO_file_overflow correctly
(from fputc) correctly calls _IO_free_backup_area, the
_IO_new_file_seekoff (called by fseek) updates the FILE internal
pointers without first free the backup area (resulting in invalid
values in the internal pointers).

The wide version also shows an issue, but instead of accessing invalid
pointers it leaks the backup memory on fseek/fputwc operation.

Checked on x86_64-linux-gnu and i686-linux-gnu.

	* libio/Makefile (tests): Add tst-bz22415.
	(tst-bz22415-ENV): New rule.
	(generated): Add tst-bz22415.mtrace and tst-bz22415.check.
	(tests-special): Add tst-bz22415-mem.out.
	($(objpfx)tst-bz22415-mem.out): New rule.
	* libio/fileops.c (_IO_new_file_seekoff): Call _IO_free_backup_area
	in case of a successful seek operation.
	* libio/wfileops.c (_IO_wfile_seekoff): Likewise.
	(_IO_wfile_overflow): Call _IO_free_wbackup_area in case a write
	buffer is required.
	* libio/tst-bz22415.c: New test.
2017-12-12 17:29:54 -02:00
..
bits Remove __need macros from stdio.h and wchar.h. 2017-06-08 13:58:17 -04:00
__fbufsize.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
__flbf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
__fpending.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
__fpurge.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
__freadable.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
__freading.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
__fsetlocking.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
__fwritable.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
__fwriting.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
bug-fopena+.c
bug-fseek.c
bug-ftell.c
bug-memstream1.c Add missing header files throughout the testsuite. 2017-02-16 17:33:18 -05:00
bug-mmap-fflush.c
bug-rewind2.c
bug-rewind.c
bug-ungetc2.c
bug-ungetc3.c
bug-ungetc4.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
bug-ungetc.c
bug-ungetwc1.c
bug-ungetwc2.c
bug-wfflush.c
bug-wmemstream1.c Add missing header files throughout the testsuite. 2017-02-16 17:33:18 -05:00
bug-wsetpos.c
clearerr_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
clearerr.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
Depend
fcloseall.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
feof_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
feof.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
ferror_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
ferror.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
filedoalloc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fileno.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
fileops.c libio: Free backup area when it not required (BZ#22415) 2017-12-12 17:29:54 -02:00
fmemopen.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fputc_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fputc.c Single threaded stdio optimization 2017-07-04 16:05:12 +01:00
fputwc_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fputwc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
freopen64.c libio: Avoid dup already opened file descriptor [BZ#21393] 2017-05-22 18:13:35 -03:00
freopen.c libio: Avoid dup already opened file descriptor [BZ#21393] 2017-05-22 18:13:35 -03:00
fseek.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fseeko64.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fseeko.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
ftello64.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
ftello.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
fwide.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fwprintf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fwscanf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
genops.c Always do locking when iterating over list of streams (bug 15142) 2017-10-05 17:26:05 +02:00
getc_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
getc.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
getchar_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
getchar.c Single threaded stdio optimization 2017-07-04 16:05:12 +01:00
getwc_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
getwc.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
getwchar_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
getwchar.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iofclose.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofdopen.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofflush_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iofflush.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofgetpos64.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofgetpos.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofgets_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iofgets.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofgetws_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iofgetws.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iofopen64.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofopen.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofopncook.c Single threaded stdio optimization 2017-07-04 16:05:12 +01:00
iofputs_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iofputs.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofputws_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iofputws.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iofread_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iofread.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofsetpos64.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofsetpos.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
ioftell.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofwide.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iofwrite_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iofwrite.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iogetdelim.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iogetline.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iogets.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iogetwline.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iolibio.h Hide internal __fopen_maybe_mmap function [BZ #18822] 2017-10-01 16:07:47 -07:00
iopadn.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iopopen.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
ioputs.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
ioseekoff.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
ioseekpos.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iosetbuffer.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
iosetvbuf.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
ioungetc.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
ioungetwc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iovdprintf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iovsprintf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iovsscanf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iovswscanf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
iowpadn.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
libc_fatal.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
libio.h Single threaded stdio optimization 2017-07-04 16:05:12 +01:00
libioP.h libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
Makefile libio: Free backup area when it not required (BZ#22415) 2017-12-12 17:29:54 -02:00
memstream.c Disable single thread optimization for open_memstream 2017-07-14 16:09:56 +01:00
obprintf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
oldfileops.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
oldfmemopen.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
oldiofclose.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
oldiofdopen.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
oldiofgetpos64.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
oldiofgetpos.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
oldiofopen.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
oldiofsetpos64.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
oldiofsetpos.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
oldiopopen.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
oldpclose.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
oldstdfiles.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
oldtmpfile.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
pclose.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
peekc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
putc_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
putc.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
putchar_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
putchar.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
putwc_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
putwc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
putwchar_u.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
putwchar.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
rewind.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
setbuf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
setlinebuf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
stdfiles.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
stdio.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
stdio.h Remove __need macros from stdio.h and wchar.h. 2017-06-08 13:58:17 -04:00
strfile.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
strops.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
swprintf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
swscanf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
test-fmemopen.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
test-freopen.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
test-freopen.sh Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst_getwc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst_getwc.input
tst_putwc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst_swprintf.c
tst_swscanf.c
tst_wprintf2.c
tst_wprintf.c
tst_wscanf.c
tst_wscanf.input
tst-atime.c
tst-bz22415.c libio: Free backup area when it not required (BZ#22415) 2017-12-12 17:29:54 -02:00
tst-eof.c
tst-ext2.c
tst-ext.c
tst-fgetwc.c
tst-fgetwc.input
tst-fgetws.c
tst-fopenloc2.c
tst-fopenloc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-fputws.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-freopen.c libio: Avoid dup already opened file descriptor [BZ#21393] 2017-05-22 18:13:35 -03:00
tst-fseek.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-ftell-active-handler.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-ftell-append.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-ftell-partial-wide.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-fwrite-error.c Add missing header files throughout the testsuite. 2017-02-16 17:33:18 -05:00
tst-memstream1.c Add missing header files throughout the testsuite. 2017-02-16 17:33:18 -05:00
tst-memstream2.c Add missing header files throughout the testsuite. 2017-02-16 17:33:18 -05:00
tst-memstream3.c Add missing header files throughout the testsuite. 2017-02-16 17:33:18 -05:00
tst-mmap2-eofsync.c 2016-06-11 Paul Pluzhnikov <ppluzhnikov@google.com> 2016-06-11 14:50:16 -07:00
tst-mmap-eofsync.c
tst-mmap-fflushsync.c
tst-mmap-offend.c
tst-mmap-setvbuf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-popen1.c
tst-setvbuf1.c
tst-sscanf.c
tst-swscanf.c
tst-ungetwc1.c
tst-ungetwc2.c
tst-widetext.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-widetext.input Finish change from “Bengali” to “Bangla” 2017-09-09 12:41:54 +02:00
tst-wmemstream1.c
tst-wmemstream2.c
tst-wmemstream3.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
vasprintf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
Versions Single threaded stdio optimization 2017-07-04 16:05:12 +01:00
vscanf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
vsnprintf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
vswprintf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
vtables.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
vwprintf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
vwscanf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
wfiledoalloc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
wfileops.c libio: Free backup area when it not required (BZ#22415) 2017-12-12 17:29:54 -02:00
wgenops.c libio: Assume _LIBC, weak_alias, errno, (__set_)errno &c are defined 2017-08-31 14:48:25 +02:00
wmemstream.c Disable single thread optimization for open_memstream 2017-07-14 16:09:56 +01:00
wprintf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
wscanf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
wstrops.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00