From c4eae75271734f820a7477dbce33f8752af6f003 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 12 Nov 2014 22:39:36 +0000 Subject: Fix __get_nprocs fgets_unlocked namespace (bug 17582). __get_nprocs is called from malloc code, but calls fgets_unlocked, which is not an ISO C or POSIX function. This patch fixes it to call a new __fgets_unlocked name instead. Note: there are various other uses of fgets_unlocked in glibc's libraries, and I haven't yet investigated which others might also be problematic (called directly or indirectly from standard functions) and so need to change to use __fgets_unlocked. Tested for x86_64 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). [BZ #17582] * libio/iofgets.c [weak_alias && !_IO_MTSAFE_IO] (__fgets_unlocked): Add alias of _IO_fgets. Use libc_hidden_def. * libio/iofgets_u.c (fgets_unlocked): Rename to __fgets_unlocked and define as weak alias of __fgets_unlocked. Use libc_hidden_weak. (__fgets_unlocked): Use libc_hidden_def. * include/stdio.h (__fgets_unlocked): Declare. Use libc_hidden_proto. * sysdeps/unix/sysv/linux/getsysstats.c (phys_pages_info): Use __fgets_unlocked instead of fgets_unlocked. * sysdeps/unix/sysv/linux/alpha/getsysstats.c (GET_NPROCS_CONF_PARSER): Likewise. * sysdeps/unix/sysv/linux/sparc/getsysstats.c (GET_NPROCS_CONF_PARSER): Likewise. --- sysdeps/unix/sysv/linux/alpha/getsysstats.c | 2 +- sysdeps/unix/sysv/linux/getsysstats.c | 2 +- sysdeps/unix/sysv/linux/sparc/getsysstats.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'sysdeps/unix') diff --git a/sysdeps/unix/sysv/linux/alpha/getsysstats.c b/sysdeps/unix/sysv/linux/alpha/getsysstats.c index 0b39d8951d..bc4abfed16 100644 --- a/sysdeps/unix/sysv/linux/alpha/getsysstats.c +++ b/sysdeps/unix/sysv/linux/alpha/getsysstats.c @@ -47,7 +47,7 @@ the kernel will not generate them. 8192 bytes are really enough. \ If there is no "CPUs ..." line then we are on a UP system. */ \ (RESULT) = 1; \ - while (fgets_unlocked ((BUFFER), sizeof (BUFFER), (FP)) != NULL) \ + while (__fgets_unlocked ((BUFFER), sizeof (BUFFER), (FP)) != NULL) \ if ((sscanf (buffer, "cpus detected : %d", &(RESULT)) == 1) \ || (sscanf (buffer, "CPUs probed %d", &(RESULT)) == 1)) \ break; \ diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c index 1746827e9e..5b277e4928 100644 --- a/sysdeps/unix/sysv/linux/getsysstats.c +++ b/sysdeps/unix/sysv/linux/getsysstats.c @@ -299,7 +299,7 @@ phys_pages_info (const char *format) string "processor". We don't have to fear extremely long lines since the kernel will not generate them. 8192 bytes are really enough. */ - while (fgets_unlocked (buffer, sizeof buffer, fp) != NULL) + while (__fgets_unlocked (buffer, sizeof buffer, fp) != NULL) if (sscanf (buffer, format, &result) == 1) { result /= (__getpagesize () / 1024); diff --git a/sysdeps/unix/sysv/linux/sparc/getsysstats.c b/sysdeps/unix/sysv/linux/sparc/getsysstats.c index 8ec0a92bbf..f28714ce1d 100644 --- a/sysdeps/unix/sysv/linux/sparc/getsysstats.c +++ b/sysdeps/unix/sysv/linux/sparc/getsysstats.c @@ -46,7 +46,7 @@ probed cpus. We don't have to fear extremely long lines since \ the kernel will not generate them. 8192 bytes are really \ enough. */ \ - while (fgets_unlocked ((BUFFER), sizeof (BUFFER), (FP)) != NULL) \ + while (__fgets_unlocked ((BUFFER), sizeof (BUFFER), (FP)) != NULL) \ if (sscanf (buffer, "ncpus probed : %d", &(RESULT)) == 1) \ break; \ } \ -- cgit 1.4.1