From 757c0871f74c3a2d682398490bcae8873d1fafd4 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 1 Jul 2015 15:35:00 +0200 Subject: Prevent use of uninitialized file lock The CHECK_INIT() is necessary before the _newlib_flockfile_start() since this would use otherwise acquire an uninitialized lock which gets initialized after this leading to a corrupt release. newlib/ChangeLog 2015-07-01 Sebastian Huber libc/stdio/fputs.c (_puts_r): Add missing CHECK_INIT(). libc/stdio/gets.c (_gets_r): Add missing _REENT_SMALL_CHECK_INIT() and CHECK_INIT(). Use _stdin_r() to get the file pointer instead of stdin. Signed-off-by: Corinna Vinschen --- newlib/libc/stdio/gets.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'newlib/libc/stdio/gets.c') diff --git a/newlib/libc/stdio/gets.c b/newlib/libc/stdio/gets.c index f51d46196..6c21f3e0c 100644 --- a/newlib/libc/stdio/gets.c +++ b/newlib/libc/stdio/gets.c @@ -79,13 +79,17 @@ _DEFUN(_gets_r, (ptr, buf), { register int c; register char *s = buf; + FILE *fp; - _newlib_flockfile_start (stdin); - while ((c = __sgetc_r (ptr, stdin)) != '\n') + _REENT_SMALL_CHECK_INIT (ptr); + fp = _stdin_r (ptr); + CHECK_INIT (ptr, fp); + _newlib_flockfile_start (fp); + while ((c = __sgetc_r (ptr, fp)) != '\n') if (c == EOF) if (s == buf) { - _newlib_flockfile_exit (stdin); + _newlib_flockfile_exit (fp); return NULL; } else @@ -93,7 +97,7 @@ _DEFUN(_gets_r, (ptr, buf), else *s++ = c; *s = 0; - _newlib_flockfile_end (stdin); + _newlib_flockfile_end (fp); return buf; } -- cgit v1.2.3