From patchwork Tue Jan 19 20:09:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. Murphy" X-Patchwork-Id: 10474 X-Patchwork-Delegate: fweimer@redhat.com Received: (qmail 109870 invoked by alias); 19 Jan 2016 20:09:15 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 109845 invoked by uid 89); 19 Jan 2016 20:09:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.7 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RP_MATCHES_RCVD autolearn=no version=3.3.2 spammy=shutdown, 3318, Hx-languages-length:2126, 243 X-HELO: e35.co.us.ibm.com X-IBM-Helo: d03dlp02.boulder.ibm.com X-IBM-MailFrom: murphyp@linux.vnet.ibm.com X-IBM-RcptTo: libc-alpha@sourceware.org From: "Paul E. Murphy" Subject: [PATCH] Fix nptl/tst-setuid3.c To: "libc-alpha@sourceware.org" , Tulio Magno Quites Machado Filho Cc: Adhemerval Zanella Message-ID: <569E97E2.1000307@linux.vnet.ibm.com> Date: Tue, 19 Jan 2016 14:09:06 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16011920-0013-0000-0000-00001C07613C pthread_barrier_wait can return either PTHREAD_BARRIER_SERIAL_THREAD or 0. Posix makes no guarantees about which thread return the unique value. Additionally, pthread_join was not called despite seemingly checking for the error. 2016-01-19 Paul E. Murphy * nptl/tst-setuid3.c (INVALID_BARRIER_WAIT): New macro. (do_test): Use macro to simplify checking barrier exit code, and actually join the child thread. --- nptl/tst-setuid3.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/nptl/tst-setuid3.c b/nptl/tst-setuid3.c index e017934..69667d8 100644 --- a/nptl/tst-setuid3.c +++ b/nptl/tst-setuid3.c @@ -33,14 +33,18 @@ static pthread_barrier_t barrier2; #define FAIL_ERR(fmt, ...) \ do { printf ("FAIL: " fmt ": %m\n", __VA_ARGS__); _exit (1); } while (0) +/* True if pthread_barrier_wait returns without an error. */ +#define INVALID_BARRIER_WAIT(x) ((x != 0) && \ + (x != PTHREAD_BARRIER_SERIAL_THREAD)) + static void * thread_func (void *ctx __attribute__ ((unused))) { int ret = pthread_barrier_wait (&barrier1); - if (ret != PTHREAD_BARRIER_SERIAL_THREAD && ret != 0) + if (INVALID_BARRIER_WAIT (ret)) FAIL ("pthread_barrier_wait (barrier1) (on thread): %d", ret); ret = pthread_barrier_wait (&barrier2); - if (ret != PTHREAD_BARRIER_SERIAL_THREAD && ret != 0) + if (INVALID_BARRIER_WAIT (ret)) FAIL ("pthread_barrier_wait (barrier2) (on thread): %d", ret); return NULL; } @@ -86,7 +90,7 @@ do_test (void) /* Ensure that the thread is running properly. */ ret = pthread_barrier_wait (&barrier1); - if (ret != 0) + if (INVALID_BARRIER_WAIT (ret)) FAIL ("pthread_barrier_wait (barrier1): %d", ret); setuid_failure (2); @@ -97,10 +101,11 @@ do_test (void) /* Shutdown. */ ret = pthread_barrier_wait (&barrier2); - if (ret != PTHREAD_BARRIER_SERIAL_THREAD && ret != 0) + if (INVALID_BARRIER_WAIT (ret)) FAIL ("pthread_barrier_wait (barrier2): %d", ret); - if (ret != PTHREAD_BARRIER_SERIAL_THREAD && ret != 0) + ret = pthread_join (thread, NULL); + if (ret != 0) FAIL ("pthread_join: %d", ret); return 0;