From: Joseph Myers Date: Wed, 17 Jun 2015 20:14:18 +0000 (+0000) Subject: Fix getpass fflush_unlocked namespace (bug 18540). X-Git-Tag: glibc-2.22~185 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb1fae6a450b3cce5a75c1ed1a734520c56a6457;p=thirdparty%2Fglibc.git Fix getpass fflush_unlocked namespace (bug 18540). The getpass function (XPG3 / XPG4 / UNIX98) calls fflush_unlocked (not in any of those standards). This patch fixes this by making fflush_unlocked into a weak alias for __fflush_unlocked and calling __fflush_unlocked from getpass. Tested for x86_64 and x86 (testsuite, and that disassembly of installed stripped shared libraries is unchanged by the patch). [BZ #18540] * libio/iofflush.c [!_IO_MTSAFE_IO] (__fflush_unlocked): Define as strong alias of _IO_fflush. Use libc_hidden_def. * libio/iofflush_u.c (fflush_unlocked): Rename to __fflush_unlocked and define as weak alias of __fflush_unlocked. Use libc_hidden_weak. * include/stdio.h (__fflush_unlocked): Declare. Use libc_hidden_proto. * misc/getpass.c (getpass): Call __fflush_unlocked instead of fflush_unlocked. * conform/Makefile (test-xfail-UNIX98/unistd.h/linknamespace): Remove variable. --- diff --git a/ChangeLog b/ChangeLog index 2b516b6a3fd..046b1ae27d9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,18 @@ 2015-06-17 Joseph Myers + [BZ #18540] + * libio/iofflush.c [!_IO_MTSAFE_IO] (__fflush_unlocked): Define as + strong alias of _IO_fflush. Use libc_hidden_def. + * libio/iofflush_u.c (fflush_unlocked): Rename to + __fflush_unlocked and define as weak alias of __fflush_unlocked. + Use libc_hidden_weak. + * include/stdio.h (__fflush_unlocked): Declare. Use + libc_hidden_proto. + * misc/getpass.c (getpass): Call __fflush_unlocked instead of + fflush_unlocked. + * conform/Makefile (test-xfail-UNIX98/unistd.h/linknamespace): + Remove variable. + [BZ #18539] * stdlib/fmtmsg.c (addseverity): Rename to __addseverity and define as weak alias of __addseverity. diff --git a/NEWS b/NEWS index 6f3d7d81a07..17a11aba16a 100644 --- a/NEWS +++ b/NEWS @@ -22,7 +22,7 @@ Version 2.22 18324, 18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434, 18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498, 18507, 18512, 18519, 18520, 18522, 18527, 18528, 18529, 18530, 18532, - 18533, 18534, 18536, 18539. + 18533, 18534, 18536, 18539, 18540. * Cache information can be queried via sysconf() function on s390 e.g. with _SC_LEVEL1_ICACHE_SIZE as argument. diff --git a/conform/Makefile b/conform/Makefile index 4bbc1e6cc82..32d29850e2f 100644 --- a/conform/Makefile +++ b/conform/Makefile @@ -348,5 +348,4 @@ test-xfail-XPG3/unistd.h/linknamespace = yes test-xfail-XPG4/unistd.h/linknamespace = yes test-xfail-POSIX/mqueue.h/linknamespace = yes test-xfail-UNIX98/mqueue.h/linknamespace = yes -test-xfail-UNIX98/unistd.h/linknamespace = yes test-xfail-UNIX98/wchar.h/linknamespace = yes diff --git a/include/stdio.h b/include/stdio.h index 9cd324bfe00..5e50e63b70e 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -155,6 +155,8 @@ extern __typeof (ftello) __ftello; libc_hidden_proto (__ftello) libc_hidden_proto (fflush) libc_hidden_proto (fflush_unlocked) +extern __typeof (fflush_unlocked) __fflush_unlocked; +libc_hidden_proto (__fflush_unlocked) extern __typeof (fread_unlocked) __fread_unlocked; libc_hidden_proto (__fread_unlocked) libc_hidden_proto (fwrite_unlocked) diff --git a/libio/iofflush.c b/libio/iofflush.c index 106f55fd2cb..236e145a918 100644 --- a/libio/iofflush.c +++ b/libio/iofflush.c @@ -50,6 +50,8 @@ weak_alias (_IO_fflush, fflush) libc_hidden_weak (fflush) #ifndef _IO_MTSAFE_IO +strong_alias (_IO_fflush, __fflush_unlocked) +libc_hidden_def (__fflush_unlocked) weak_alias (_IO_fflush, fflush_unlocked) libc_hidden_weak (fflush_unlocked) #endif diff --git a/libio/iofflush_u.c b/libio/iofflush_u.c index 6cc325a5b37..e00447991d3 100644 --- a/libio/iofflush_u.c +++ b/libio/iofflush_u.c @@ -28,7 +28,7 @@ #include int -fflush_unlocked (fp) +__fflush_unlocked (fp) _IO_FILE *fp; { if (fp == NULL) @@ -39,4 +39,6 @@ fflush_unlocked (fp) return _IO_SYNC (fp) ? EOF : 0; } } -libc_hidden_def (fflush_unlocked) +libc_hidden_def (__fflush_unlocked) +weak_alias (__fflush_unlocked, fflush_unlocked) +libc_hidden_weak (fflush_unlocked) diff --git a/misc/getpass.c b/misc/getpass.c index 36796db0c8b..dcaff3855c4 100644 --- a/misc/getpass.c +++ b/misc/getpass.c @@ -91,7 +91,7 @@ getpass (prompt) /* Write the prompt. */ __fxprintf (out, "%s", prompt); - fflush_unlocked (out); + __fflush_unlocked (out); /* Read the password. */ nread = __getline (&buf, &bufsize, in);