From 4f10ef40b9c89b33ad769e6db6ca9fa2b627937b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Tue, 21 Feb 2017 19:58:19 +0100 Subject: [PATCH] pthread: check parameters for pthread_barrierattr_*pshared(). * fixes #13323. --- .../libroot/posix/pthread/pthread_barrier.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/system/libroot/posix/pthread/pthread_barrier.cpp b/src/system/libroot/posix/pthread/pthread_barrier.cpp index 7421cb7e25..1637b8e0a1 100644 --- a/src/system/libroot/posix/pthread/pthread_barrier.cpp +++ b/src/system/libroot/posix/pthread/pthread_barrier.cpp @@ -137,7 +137,10 @@ pthread_barrierattr_destroy(pthread_barrierattr_t* _attr) int pthread_barrierattr_getpshared(const pthread_barrierattr_t* _attr, int* shared) { - pthread_barrierattr* attr = *_attr; + pthread_barrierattr* attr; + + if (_attr == NULL || (attr = *_attr) == NULL || shared == NULL) + return B_BAD_VALUE; *shared = attr->process_shared ? PTHREAD_PROCESS_SHARED : PTHREAD_PROCESS_PRIVATE; @@ -149,7 +152,13 @@ pthread_barrierattr_getpshared(const pthread_barrierattr_t* _attr, int* shared) int pthread_barrierattr_setpshared(pthread_barrierattr_t* _attr, int shared) { - pthread_barrierattr* attr = *_attr; + pthread_barrierattr* attr; + + if (_attr == NULL || (attr = *_attr) == NULL + || shared < PTHREAD_PROCESS_PRIVATE + || shared > PTHREAD_PROCESS_SHARED) { + return B_BAD_VALUE; + } attr->process_shared = shared == PTHREAD_PROCESS_SHARED;