Skip to content

Commit

Permalink
Fix getpass fflush_unlocked namespace (bug 18540).
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Joseph Myers committed Jun 17, 2015
1 parent 68f1ba4 commit eb1fae6
Show file tree
Hide file tree
Showing 7 changed files with 23 additions and 5 deletions.
13 changes: 13 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
2015-06-17 Joseph Myers <joseph@codesourcery.com>

[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.
Expand Down
2 changes: 1 addition & 1 deletion NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
1 change: 0 additions & 1 deletion conform/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 2 additions & 0 deletions include/stdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 2 additions & 0 deletions libio/iofflush.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 4 additions & 2 deletions libio/iofflush_u.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
#include <stdio.h>

int
fflush_unlocked (fp)
__fflush_unlocked (fp)
_IO_FILE *fp;
{
if (fp == NULL)
Expand All @@ -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)
2 changes: 1 addition & 1 deletion misc/getpass.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit eb1fae6

Please sign in to comment.