Module Name:    src
Committed By:   kamil
Date:           Wed Jan 29 21:11:25 UTC 2020

Modified Files:
        src/lib/libpthread: pthread_mutex.c

Log Message:
Use pthread_mutexattr_t and pthread_mutex_t magic fields

Validate _PT_MUTEX_MAGIC in pthread_mutex_t and _PT_MUTEXATTR_MAGIC
in pthread_mutexattr_t accordingly.


To generate a diff of this commit:
cvs rdiff -u -r1.69 -r1.70 src/lib/libpthread/pthread_mutex.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libpthread/pthread_mutex.c
diff -u src/lib/libpthread/pthread_mutex.c:1.69 src/lib/libpthread/pthread_mutex.c:1.70
--- src/lib/libpthread/pthread_mutex.c:1.69	Wed Jan 29 10:55:23 2020
+++ src/lib/libpthread/pthread_mutex.c	Wed Jan 29 21:11:24 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pthread_mutex.c,v 1.69 2020/01/29 10:55:23 kamil Exp $	*/
+/*	$NetBSD: pthread_mutex.c,v 1.70 2020/01/29 21:11:24 kamil Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2003, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -47,7 +47,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: pthread_mutex.c,v 1.69 2020/01/29 10:55:23 kamil Exp $");
+__RCSID("$NetBSD: pthread_mutex.c,v 1.70 2020/01/29 21:11:24 kamil Exp $");
 
 #include <sys/types.h>
 #include <sys/lwpctl.h>
@@ -197,6 +197,9 @@ pthread_mutex_lock(pthread_mutex_t *ptm)
 	if (__predict_false(__uselibcstub))
 		return __libc_mutex_lock_stub(ptm);
 
+	pthread__error(EINVAL, "Invalid mutex",
+	    ptm->ptm_magic == _PT_MUTEX_MAGIC);
+
 	self = pthread__self();
 	val = atomic_cas_ptr(&ptm->ptm_owner, NULL, self);
 	if (__predict_true(val == NULL)) {
@@ -214,6 +217,9 @@ pthread_mutex_timedlock(pthread_mutex_t*
 	pthread_t self;
 	void *val;
 
+	pthread__error(EINVAL, "Invalid mutex",
+	    ptm->ptm_magic == _PT_MUTEX_MAGIC);
+
 	self = pthread__self();
 	val = atomic_cas_ptr(&ptm->ptm_owner, NULL, self);
 	if (__predict_true(val == NULL)) {
@@ -298,9 +304,6 @@ pthread__mutex_lock_slow(pthread_mutex_t
 	int serrno;
 	int error;
 
-	pthread__error(EINVAL, "Invalid mutex",
-	    ptm->ptm_magic == _PT_MUTEX_MAGIC);
-
 	owner = ptm->ptm_owner;
 	self = pthread__self();
 
@@ -410,6 +413,9 @@ pthread_mutex_trylock(pthread_mutex_t *p
 	if (__predict_false(__uselibcstub))
 		return __libc_mutex_trylock_stub(ptm);
 
+	pthread__error(EINVAL, "Invalid mutex",
+	    ptm->ptm_magic == _PT_MUTEX_MAGIC);
+
 	self = pthread__self();
 	val = atomic_cas_ptr(&ptm->ptm_owner, NULL, self);
 	if (__predict_true(val == NULL)) {
@@ -450,6 +456,9 @@ pthread_mutex_unlock(pthread_mutex_t *pt
 	if (__predict_false(__uselibcstub))
 		return __libc_mutex_unlock_stub(ptm);
 
+	pthread__error(EINVAL, "Invalid mutex",
+	    ptm->ptm_magic == _PT_MUTEX_MAGIC);
+
 #ifndef PTHREAD__ATOMIC_IS_MEMBAR
 	membar_exit();
 #endif
@@ -468,9 +477,6 @@ pthread__mutex_unlock_slow(pthread_mutex
 	pthread_t self, owner, new;
 	int weown, error;
 
-	pthread__error(EINVAL, "Invalid mutex",
-	    ptm->ptm_magic == _PT_MUTEX_MAGIC);
-
 	self = pthread__self();
 	owner = ptm->ptm_owner;
 	weown = (MUTEX_OWNER(owner) == (uintptr_t)self);
@@ -725,6 +731,9 @@ pthread_mutexattr_getpshared(const pthre
     int * __restrict pshared)
 {
 
+	pthread__error(EINVAL, "Invalid mutex attribute",
+		attr->ptma_magic == _PT_MUTEXATTR_MAGIC);
+
 	*pshared = PTHREAD_PROCESS_PRIVATE;
 	return 0;
 }
@@ -733,6 +742,9 @@ int
 pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared)
 {
 
+	pthread__error(EINVAL, "Invalid mutex attribute",
+		attr->ptma_magic == _PT_MUTEXATTR_MAGIC);
+
 	switch(pshared) {
 	case PTHREAD_PROCESS_PRIVATE:
 		return 0;
@@ -772,6 +784,10 @@ pthread__mutex_deferwake(pthread_t self,
 int
 pthread_mutex_getprioceiling(const pthread_mutex_t *ptm, int *ceil) 
 {
+
+	pthread__error(EINVAL, "Invalid mutex",
+	    ptm->ptm_magic == _PT_MUTEX_MAGIC);
+
 	*ceil = ptm->ptm_ceiling;
 	return 0;
 }
@@ -781,6 +797,9 @@ pthread_mutex_setprioceiling(pthread_mut
 {
 	int error;
 
+	pthread__error(EINVAL, "Invalid mutex",
+	    ptm->ptm_magic == _PT_MUTEX_MAGIC);
+
 	error = pthread_mutex_lock(ptm);
 	if (error == 0) {
 		*old_ceil = ptm->ptm_ceiling;

Reply via email to