forked from pool/glibc
Andreas Schwab
746e16d2b9
- Update to glibc 2.17.90 85891acadf1b: * CVE-2013-2207 Incorrectly granting access to another user's pseudo-terminal has been fixed by disabling the use of pt_chown (Bugzilla #15755). Distributions can re-enable building and using pt_chown via the new configure option `--enable-pt_chown'. Enabling the use of pt_chown carries with it considerable security risks and should only be used if the distribution understands and accepts the risks. * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla #15078). * CVE-2013-1914 Stack overflow in getaddrinfo with many results has been fixed (Bugzilla #15330). * Add support for calling C++11 thread_local object destructors on thread and program exit. This needs compiler support for offloading C++11 destructor calls to glibc. * Improved worst case performance of libm functions with double inputs and output. * Support for priority inherited mutexes in pthread condition variables on non-x86 architectures. * Optimized string functions for AArch64. Implemented by Marcus Shawcroft. * Optimized string functions for ARM. Implemented by Will Newton and Richard Henderson. * Added a benchmark framework to track performance of functions in glibc. * New <math.h> macro named issignaling to check for a signaling NaN (sNaN). It is based on draft TS 18661 and currently enabled as a GNU extension. * On Linux, the clock function now uses the clock_gettime system call for improved precision, rather than old times system call. * Added new API functions pthread_getattr_default_np and pthread_setattr_default_np to get and set the default pthread attributes of a process. * Added support for TSX lock elision for pthread mutexes on i386 and x86-64. OBS-URL: https://build.opensuse.org/request/show/186119 OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=304
60 lines
1.6 KiB
Diff
60 lines
1.6 KiB
Diff
2013-07-31 Andreas Schwab <schwab@suse.de>
|
|
|
|
* elf/pldd.c (wait_for_ptrace_stop): New function.
|
|
(main): Call it after attaching.
|
|
|
|
Index: glibc-2.17.90/elf/pldd.c
|
|
===================================================================
|
|
--- glibc-2.17.90.orig/elf/pldd.c
|
|
+++ glibc-2.17.90/elf/pldd.c
|
|
@@ -34,6 +34,7 @@
|
|
#include <unistd.h>
|
|
#include <sys/ptrace.h>
|
|
#include <sys/stat.h>
|
|
+#include <sys/wait.h>
|
|
|
|
#include <ldsodefs.h>
|
|
#include <version.h>
|
|
@@ -82,6 +83,7 @@ static char *exe;
|
|
|
|
/* Local functions. */
|
|
static int get_process_info (int dfd, long int pid);
|
|
+static void wait_for_ptrace_stop (long int pid);
|
|
|
|
|
|
int
|
|
@@ -170,6 +172,8 @@ main (int argc, char *argv[])
|
|
tid);
|
|
}
|
|
|
|
+ wait_for_ptrace_stop (tid);
|
|
+
|
|
struct thread_list *newp = alloca (sizeof (*newp));
|
|
newp->tid = tid;
|
|
newp->next = thread_list;
|
|
@@ -194,6 +198,24 @@ main (int argc, char *argv[])
|
|
}
|
|
|
|
|
|
+/* Wait for PID to enter ptrace-stop state after being attached. */
|
|
+static void
|
|
+wait_for_ptrace_stop (long int pid)
|
|
+{
|
|
+ int status;
|
|
+
|
|
+ /* While waiting for SIGSTOP being delivered to the tracee we have to
|
|
+ reinject any other pending signal. Ignore all other errors. */
|
|
+ while (waitpid (pid, &status, __WALL) == pid && WIFSTOPPED (status))
|
|
+ {
|
|
+ /* The STOP signal should not be delivered to the tracee. */
|
|
+ if (WSTOPSIG (status) == SIGSTOP)
|
|
+ return;
|
|
+ ptrace (PTRACE_CONT, pid, NULL, (void *) (uintptr_t) WSTOPSIG (status));
|
|
+ }
|
|
+}
|
|
+
|
|
+
|
|
/* Handle program arguments. */
|
|
static error_t
|
|
parse_opt (int key, char *arg, struct argp_state *state)
|