From 7c3164bc6650ceeecd67841dfb8fcf399d12a93f Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 18 Jun 2004 04:29:42 +0000 Subject: Update. 2004-06-17 Ulrich Drepper * sysdeps/pthread/pthread_cond_timedwait.c (__pthread_cond_timedwait): Also check for negativ nanoseconds. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S (__pthread_cond_timedwait): Check for invalid nanosecond in timeout value. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise. * tst-cond19.c: New file. * Makefile: Add rules to build and run tst-cond19. --- nptl/sysdeps/pthread/pthread_cond_timedwait.c | 2 +- nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S | 4 ++++ nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) (limited to 'nptl/sysdeps') diff --git a/nptl/sysdeps/pthread/pthread_cond_timedwait.c b/nptl/sysdeps/pthread/pthread_cond_timedwait.c index 940b51b4be..7de2b2936f 100644 --- a/nptl/sysdeps/pthread/pthread_cond_timedwait.c +++ b/nptl/sysdeps/pthread/pthread_cond_timedwait.c @@ -50,7 +50,7 @@ __pthread_cond_timedwait (cond, mutex, abstime) int result = 0; /* Catch invalid parameters. */ - if (abstime->tv_nsec >= 1000000000) + if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) return EINVAL; /* Make sure we are along. */ diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S index 305fa4d5d7..1d24b1a1e1 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S @@ -55,6 +55,10 @@ __pthread_cond_timedwait: movl 20(%esp), %ebx movl 28(%esp), %ebp + cmpl $1000000000, 4(%ebp) + movl $EINVAL, %eax + jae 18f + /* Get internal lock. */ movl $1, %edx xorl %eax, %eax diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S index e75f05e07f..5c6a471096 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S @@ -54,6 +54,11 @@ __pthread_cond_timedwait: #define FRAME_SIZE 80 subq $FRAME_SIZE, %rsp .Lsubq: + + cmpq $1000000000, 8(%rdx) + movl $EINVAL, %rax + jae 18f + /* Stack frame: rsp + 80 -- cgit 1.4.1