mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
Fix pthreads getrlimit, gettimeofday namespace (bug 17682).
Some pthreads functions use getrlimit and gettimeofday, but these functions are XSI, not base POSIX; this is a namespace issue for dynamic linking as well as static linking. This patch makes them use __getrlimit and __gettimeofday instead - the former needed to be newly exported from libc.so at GLIBC_PRIVATE (and so now needs libc_hidden_proto / libc_hidden_def), the latter was already exported. Tested for x86_64 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). [BZ #17682] * resource/Versions (libc): Add __getrlimit at GLIBC_PRIVATE. * resource/getrlimit.c (__getrlimit): Use libc_hidden_def. * sysdeps/mach/hurd/getrlimit.c (__getrlimit): Likewise. * include/sys/resource.h (__getrlimit): Use libc_hidden_proto. * nptl/nptl-init.c (__pthread_initialize_minimal_internal): Use __getrlimit instead of getrlimit. * nptl/pthread_cond_timedwait.c (__pthread_cond_timedwait): Use __gettimeofday instead of gettimeofday. * nptl/pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * nptl/pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * sysdeps/pthread/aio_misc.c (handle_fildes_io): Likewise. * conform/Makefile (test-xfail-POSIX2008/aio.h/linknamespace): Remove variable. (test-xfail-POSIX2008/pthread.h/linknamespace): Likewise. (test-xfail-POSIX2008/time.h/linknamespace): Likewise.
This commit is contained in:
21
ChangeLog
21
ChangeLog
@ -1,3 +1,24 @@
|
|||||||
|
2014-12-06 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
[BZ #17682]
|
||||||
|
* resource/Versions (libc): Add __getrlimit at GLIBC_PRIVATE.
|
||||||
|
* resource/getrlimit.c (__getrlimit): Use libc_hidden_def.
|
||||||
|
* sysdeps/mach/hurd/getrlimit.c (__getrlimit): Likewise.
|
||||||
|
* include/sys/resource.h (__getrlimit): Use libc_hidden_proto.
|
||||||
|
* nptl/nptl-init.c (__pthread_initialize_minimal_internal): Use
|
||||||
|
__getrlimit instead of getrlimit.
|
||||||
|
* nptl/pthread_cond_timedwait.c (__pthread_cond_timedwait): Use
|
||||||
|
__gettimeofday instead of gettimeofday.
|
||||||
|
* nptl/pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock):
|
||||||
|
Likewise.
|
||||||
|
* nptl/pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock):
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/pthread/aio_misc.c (handle_fildes_io): Likewise.
|
||||||
|
* conform/Makefile (test-xfail-POSIX2008/aio.h/linknamespace):
|
||||||
|
Remove variable.
|
||||||
|
(test-xfail-POSIX2008/pthread.h/linknamespace): Likewise.
|
||||||
|
(test-xfail-POSIX2008/time.h/linknamespace): Likewise.
|
||||||
|
|
||||||
2014-12-05 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
2014-12-05 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
||||||
|
|
||||||
* libio/tst-ftell-active-handler.c (do_ftell_test): Fix buffer overrun
|
* libio/tst-ftell-active-handler.c (do_ftell_test): Fix buffer overrun
|
||||||
|
3
NEWS
3
NEWS
@ -13,7 +13,8 @@ Version 2.21
|
|||||||
16619, 16740, 16857, 17192, 17266, 17344, 17363, 17370, 17371, 17411,
|
16619, 16740, 16857, 17192, 17266, 17344, 17363, 17370, 17371, 17411,
|
||||||
17460, 17475, 17485, 17501, 17506, 17508, 17522, 17555, 17570, 17571,
|
17460, 17475, 17485, 17501, 17506, 17508, 17522, 17555, 17570, 17571,
|
||||||
17572, 17573, 17574, 17581, 17582, 17583, 17584, 17585, 17589, 17594,
|
17572, 17573, 17574, 17581, 17582, 17583, 17584, 17585, 17589, 17594,
|
||||||
17601, 17608, 17616, 17625, 17633, 17647, 17653, 17664, 17665, 17668.
|
17601, 17608, 17616, 17625, 17633, 17647, 17653, 17664, 17665, 17668,
|
||||||
|
17682.
|
||||||
|
|
||||||
* CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
|
* CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
|
||||||
under certain input conditions resulting in the execution of a shell for
|
under certain input conditions resulting in the execution of a shell for
|
||||||
|
@ -424,18 +424,15 @@ test-xfail-XOPEN2K/syslog.h/linknamespace = yes
|
|||||||
test-xfail-XOPEN2K/ucontext.h/linknamespace = yes
|
test-xfail-XOPEN2K/ucontext.h/linknamespace = yes
|
||||||
test-xfail-XOPEN2K/unistd.h/linknamespace = yes
|
test-xfail-XOPEN2K/unistd.h/linknamespace = yes
|
||||||
test-xfail-XOPEN2K/wordexp.h/linknamespace = yes
|
test-xfail-XOPEN2K/wordexp.h/linknamespace = yes
|
||||||
test-xfail-POSIX2008/aio.h/linknamespace = yes
|
|
||||||
test-xfail-POSIX2008/ctype.h/linknamespace = yes
|
test-xfail-POSIX2008/ctype.h/linknamespace = yes
|
||||||
test-xfail-POSIX2008/dirent.h/linknamespace = yes
|
test-xfail-POSIX2008/dirent.h/linknamespace = yes
|
||||||
test-xfail-POSIX2008/fcntl.h/linknamespace = yes
|
test-xfail-POSIX2008/fcntl.h/linknamespace = yes
|
||||||
test-xfail-POSIX2008/grp.h/linknamespace = yes
|
test-xfail-POSIX2008/grp.h/linknamespace = yes
|
||||||
test-xfail-POSIX2008/mqueue.h/linknamespace = yes
|
test-xfail-POSIX2008/mqueue.h/linknamespace = yes
|
||||||
test-xfail-POSIX2008/netdb.h/linknamespace = yes
|
test-xfail-POSIX2008/netdb.h/linknamespace = yes
|
||||||
test-xfail-POSIX2008/pthread.h/linknamespace = yes
|
|
||||||
test-xfail-POSIX2008/regex.h/linknamespace = yes
|
test-xfail-POSIX2008/regex.h/linknamespace = yes
|
||||||
test-xfail-POSIX2008/semaphore.h/linknamespace = yes
|
test-xfail-POSIX2008/semaphore.h/linknamespace = yes
|
||||||
test-xfail-POSIX2008/spawn.h/linknamespace = yes
|
test-xfail-POSIX2008/spawn.h/linknamespace = yes
|
||||||
test-xfail-POSIX2008/time.h/linknamespace = yes
|
|
||||||
test-xfail-POSIX2008/unistd.h/linknamespace = yes
|
test-xfail-POSIX2008/unistd.h/linknamespace = yes
|
||||||
test-xfail-XOPEN2K8/dirent.h/linknamespace = yes
|
test-xfail-XOPEN2K8/dirent.h/linknamespace = yes
|
||||||
test-xfail-XOPEN2K8/fcntl.h/linknamespace = yes
|
test-xfail-XOPEN2K8/fcntl.h/linknamespace = yes
|
||||||
|
@ -9,6 +9,7 @@ libc_hidden_proto (getrlimit64)
|
|||||||
/* Now define the internal interfaces. */
|
/* Now define the internal interfaces. */
|
||||||
extern int __getrlimit (enum __rlimit_resource __resource,
|
extern int __getrlimit (enum __rlimit_resource __resource,
|
||||||
struct rlimit *__rlimits);
|
struct rlimit *__rlimits);
|
||||||
|
libc_hidden_proto (__getrlimit)
|
||||||
extern int __getrusage (enum __rusage_who __who, struct rusage *__usage)
|
extern int __getrusage (enum __rusage_who __who, struct rusage *__usage)
|
||||||
attribute_hidden;
|
attribute_hidden;
|
||||||
|
|
||||||
|
@ -433,7 +433,7 @@ __pthread_initialize_minimal_internal (void)
|
|||||||
/* Determine the default allowed stack size. This is the size used
|
/* Determine the default allowed stack size. This is the size used
|
||||||
in case the user does not specify one. */
|
in case the user does not specify one. */
|
||||||
struct rlimit limit;
|
struct rlimit limit;
|
||||||
if (getrlimit (RLIMIT_STACK, &limit) != 0
|
if (__getrlimit (RLIMIT_STACK, &limit) != 0
|
||||||
|| limit.rlim_cur == RLIM_INFINITY)
|
|| limit.rlim_cur == RLIM_INFINITY)
|
||||||
/* The system limit is not usable. Use an architecture-specific
|
/* The system limit is not usable. Use an architecture-specific
|
||||||
default. */
|
default. */
|
||||||
|
@ -131,7 +131,7 @@ __pthread_cond_timedwait (cond, mutex, abstime)
|
|||||||
# else
|
# else
|
||||||
/* Get the current time. So far we support only one clock. */
|
/* Get the current time. So far we support only one clock. */
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
(void) gettimeofday (&tv, NULL);
|
(void) __gettimeofday (&tv, NULL);
|
||||||
|
|
||||||
/* Convert the absolute timeout value to a relative timeout. */
|
/* Convert the absolute timeout value to a relative timeout. */
|
||||||
rt.tv_sec = abstime->tv_sec - tv.tv_sec;
|
rt.tv_sec = abstime->tv_sec - tv.tv_sec;
|
||||||
|
@ -90,7 +90,7 @@ pthread_rwlock_timedrdlock (rwlock, abstime)
|
|||||||
|| !defined lll_futex_timed_wait_bitset)
|
|| !defined lll_futex_timed_wait_bitset)
|
||||||
/* Get the current time. So far we support only one clock. */
|
/* Get the current time. So far we support only one clock. */
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
(void) gettimeofday (&tv, NULL);
|
(void) __gettimeofday (&tv, NULL);
|
||||||
|
|
||||||
/* Convert the absolute timeout value to a relative timeout. */
|
/* Convert the absolute timeout value to a relative timeout. */
|
||||||
struct timespec rt;
|
struct timespec rt;
|
||||||
|
@ -81,7 +81,7 @@ pthread_rwlock_timedwrlock (rwlock, abstime)
|
|||||||
|| !defined lll_futex_timed_wait_bitset)
|
|| !defined lll_futex_timed_wait_bitset)
|
||||||
/* Get the current time. So far we support only one clock. */
|
/* Get the current time. So far we support only one clock. */
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
(void) gettimeofday (&tv, NULL);
|
(void) __gettimeofday (&tv, NULL);
|
||||||
|
|
||||||
/* Convert the absolute timeout value to a relative timeout. */
|
/* Convert the absolute timeout value to a relative timeout. */
|
||||||
struct timespec rt;
|
struct timespec rt;
|
||||||
|
@ -22,4 +22,7 @@ libc {
|
|||||||
# s*
|
# s*
|
||||||
setrlimit64;
|
setrlimit64;
|
||||||
}
|
}
|
||||||
|
GLIBC_PRIVATE {
|
||||||
|
__getrlimit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ __getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits)
|
|||||||
__set_errno (ENOSYS);
|
__set_errno (ENOSYS);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
libc_hidden_def (__getrlimit)
|
||||||
weak_alias (__getrlimit, getrlimit)
|
weak_alias (__getrlimit, getrlimit)
|
||||||
|
|
||||||
stub_warning (getrlimit)
|
stub_warning (getrlimit)
|
||||||
|
@ -43,4 +43,5 @@ __getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
libc_hidden_def (__getrlimit)
|
||||||
weak_alias (__getrlimit, getrlimit)
|
weak_alias (__getrlimit, getrlimit)
|
||||||
|
@ -631,7 +631,7 @@ handle_fildes_io (void *arg)
|
|||||||
struct timespec wakeup_time;
|
struct timespec wakeup_time;
|
||||||
|
|
||||||
++idle_thread_count;
|
++idle_thread_count;
|
||||||
gettimeofday (&now, NULL);
|
__gettimeofday (&now, NULL);
|
||||||
wakeup_time.tv_sec = now.tv_sec + optim.aio_idle_time;
|
wakeup_time.tv_sec = now.tv_sec + optim.aio_idle_time;
|
||||||
wakeup_time.tv_nsec = now.tv_usec * 1000;
|
wakeup_time.tv_nsec = now.tv_usec * 1000;
|
||||||
if (wakeup_time.tv_nsec >= 1000000000)
|
if (wakeup_time.tv_nsec >= 1000000000)
|
||||||
|
Reference in New Issue
Block a user