Ian Kent d7ed6c
autofs-5.1.0 - add mutex call return check in defaults.c
Ian Kent d7ed6c
Ian Kent d7ed6c
From: Ian Kent <ikent@redhat.com>
Ian Kent d7ed6c
Ian Kent d7ed6c
Even though pthread_mutex_lock() and pthread_mutex_unlock() should
Ian Kent d7ed6c
never fail checking their return has very occassionally been useful
Ian Kent d7ed6c
and isn't consistent with the usage elsewhere.
Ian Kent d7ed6c
---
Ian Kent d7ed6c
 CHANGELOG      |    1 +
Ian Kent d7ed6c
 lib/defaults.c |   55 ++++++++++++++++++++++++++++++++++---------------------
Ian Kent d7ed6c
 2 files changed, 35 insertions(+), 21 deletions(-)
Ian Kent d7ed6c
Ian Kent d7ed6c
diff --git a/CHANGELOG b/CHANGELOG
Ian Kent 561b72
index 9cbccce..31a804d 100644
Ian Kent d7ed6c
--- a/CHANGELOG
Ian Kent d7ed6c
+++ b/CHANGELOG
Ian Kent 561b72
@@ -20,6 +20,7 @@
Ian Kent d7ed6c
 - fix some out of order evaluations in parse_amd.c.
Ian Kent d7ed6c
 - fix copy and paste error in dup_defaults_entry().
Ian Kent 561b72
 - fix leak in parse_mount().
Ian Kent d7ed6c
+- add mutex call return check in defaults.c.
Ian Kent d7ed6c
 
Ian Kent d7ed6c
 04/06/2014 autofs-5.1.0
Ian Kent d7ed6c
 =======================
Ian Kent d7ed6c
diff --git a/lib/defaults.c b/lib/defaults.c
Ian Kent 561b72
index 4e09c19..83f6ac7 100644
Ian Kent d7ed6c
--- a/lib/defaults.c
Ian Kent d7ed6c
+++ b/lib/defaults.c
Ian Kent d7ed6c
@@ -172,6 +172,19 @@ static int conf_update(const char *, const char *, const char *, unsigned long);
Ian Kent d7ed6c
 static void conf_delete(const char *, const char *);
Ian Kent d7ed6c
 static struct conf_option *conf_lookup(const char *, const char *);
Ian Kent d7ed6c
 
Ian Kent d7ed6c
+static void defaults_mutex_lock(void)
Ian Kent d7ed6c
+{
Ian Kent d7ed6c
+	int status = pthread_mutex_lock(&conf_mutex);
Ian Kent d7ed6c
+	if (status)
Ian Kent d7ed6c
+		fatal(status);
Ian Kent d7ed6c
+}
Ian Kent d7ed6c
+
Ian Kent d7ed6c
+static void defaults_mutex_unlock(void)
Ian Kent d7ed6c
+{
Ian Kent 31ae7a
+	int status = pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+	if (status)
Ian Kent d7ed6c
+		fatal(status);
Ian Kent d7ed6c
+}
Ian Kent d7ed6c
 
Ian Kent d7ed6c
 static void message(unsigned int to_syslog, const char *msg, ...)
Ian Kent d7ed6c
 {
Ian Kent d7ed6c
@@ -254,9 +267,9 @@ static void __conf_release(void)
Ian Kent d7ed6c
 
Ian Kent d7ed6c
 void defaults_conf_release(void)
Ian Kent d7ed6c
 {
Ian Kent d7ed6c
-	pthread_mutex_lock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_lock();
Ian Kent d7ed6c
 	__conf_release();
Ian Kent d7ed6c
-	pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_unlock();
Ian Kent d7ed6c
 	return;
Ian Kent d7ed6c
 }
Ian Kent d7ed6c
 
Ian Kent d7ed6c
@@ -728,11 +741,11 @@ static unsigned int conf_section_exists(const char *section)
Ian Kent d7ed6c
 		return 0;
Ian Kent d7ed6c
 
Ian Kent d7ed6c
 	ret = 0;
Ian Kent d7ed6c
-	pthread_mutex_lock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_lock();
Ian Kent d7ed6c
 	co = conf_lookup(section, section);
Ian Kent d7ed6c
 	if (co)
Ian Kent d7ed6c
 		ret = 1;
Ian Kent d7ed6c
-	pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_unlock();
Ian Kent d7ed6c
 
Ian Kent d7ed6c
 	return ret;
Ian Kent d7ed6c
 }
Ian Kent d7ed6c
@@ -1058,7 +1071,7 @@ unsigned int defaults_read_config(unsigned int to_syslog)
Ian Kent d7ed6c
 
Ian Kent d7ed6c
 	conf = oldconf = NULL;
Ian Kent d7ed6c
 
Ian Kent d7ed6c
-	pthread_mutex_lock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_lock();
Ian Kent d7ed6c
 	if (!config) {
Ian Kent d7ed6c
 		if (conf_init()) {
Ian Kent d7ed6c
 			message(to_syslog, "failed to init config");
Ian Kent d7ed6c
@@ -1150,7 +1163,7 @@ out:
Ian Kent d7ed6c
 		fclose(conf);
Ian Kent d7ed6c
 	if (oldconf)
Ian Kent d7ed6c
 		fclose(oldconf);
Ian Kent d7ed6c
-	pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_unlock();
Ian Kent d7ed6c
 	return ret;
Ian Kent d7ed6c
 }
Ian Kent d7ed6c
 
Ian Kent d7ed6c
@@ -1159,11 +1172,11 @@ static char *conf_get_string(const char *section, const char *name)
Ian Kent d7ed6c
 	struct conf_option *co;
Ian Kent d7ed6c
 	char *val = NULL;
Ian Kent d7ed6c
 
Ian Kent d7ed6c
-	pthread_mutex_lock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_lock();
Ian Kent d7ed6c
 	co = conf_lookup(section, name);
Ian Kent d7ed6c
 	if (co && co->value)
Ian Kent d7ed6c
 		val = strdup(co->value);
Ian Kent d7ed6c
-	pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_unlock();
Ian Kent d7ed6c
 	return val;
Ian Kent d7ed6c
 }
Ian Kent d7ed6c
 
Ian Kent d7ed6c
@@ -1172,11 +1185,11 @@ static long conf_get_number(const char *section, const char *name)
Ian Kent d7ed6c
 	struct conf_option *co;
Ian Kent d7ed6c
 	long val = -1;
Ian Kent d7ed6c
 
Ian Kent d7ed6c
-	pthread_mutex_lock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_lock();
Ian Kent d7ed6c
 	co = conf_lookup(section, name);
Ian Kent d7ed6c
 	if (co && co->value)
Ian Kent d7ed6c
 		val = atol(co->value);
Ian Kent d7ed6c
-	pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_unlock();
Ian Kent d7ed6c
 	return val;
Ian Kent d7ed6c
 }
Ian Kent d7ed6c
 
Ian Kent d7ed6c
@@ -1185,7 +1198,7 @@ static int conf_get_yesno(const char *section, const char *name)
Ian Kent d7ed6c
 	struct conf_option *co;
Ian Kent d7ed6c
 	int val = -1;
Ian Kent d7ed6c
 
Ian Kent d7ed6c
-	pthread_mutex_lock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_lock();
Ian Kent d7ed6c
 	co = conf_lookup(section, name);
Ian Kent d7ed6c
 	if (co && co->value) {
Ian Kent d7ed6c
 		if (isdigit(*co->value))
Ian Kent d7ed6c
@@ -1195,7 +1208,7 @@ static int conf_get_yesno(const char *section, const char *name)
Ian Kent d7ed6c
 		else if (!strcasecmp(co->value, "no"))
Ian Kent d7ed6c
 			val = 0;
Ian Kent d7ed6c
 	}
Ian Kent d7ed6c
-	pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_unlock();
Ian Kent d7ed6c
 	return val;
Ian Kent d7ed6c
 }
Ian Kent d7ed6c
 
Ian Kent d7ed6c
@@ -1272,10 +1285,10 @@ struct list_head *defaults_get_uris(void)
Ian Kent d7ed6c
 		return NULL;
Ian Kent d7ed6c
 	}
Ian Kent d7ed6c
 
Ian Kent d7ed6c
-	pthread_mutex_lock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_lock();
Ian Kent d7ed6c
 	co = conf_lookup(autofs_gbl_sec, NAME_LDAP_URI);
Ian Kent d7ed6c
 	if (!co) {
Ian Kent d7ed6c
-		pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+		defaults_mutex_unlock();
Ian Kent d7ed6c
 		free(list);
Ian Kent d7ed6c
 		return NULL;
Ian Kent d7ed6c
 	}
Ian Kent d7ed6c
@@ -1286,7 +1299,7 @@ struct list_head *defaults_get_uris(void)
Ian Kent d7ed6c
 				add_uris(co->value, list);
Ian Kent d7ed6c
 		co = co->next;
Ian Kent d7ed6c
 	}
Ian Kent d7ed6c
-	pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_unlock();
Ian Kent d7ed6c
 
Ian Kent d7ed6c
 	if (list_empty(list)) {
Ian Kent d7ed6c
 		free(list);
Ian Kent d7ed6c
@@ -1398,10 +1411,10 @@ struct ldap_searchdn *defaults_get_searchdns(void)
Ian Kent d7ed6c
 	if (!defaults_read_config(0))
Ian Kent d7ed6c
 		return NULL;
Ian Kent d7ed6c
 
Ian Kent d7ed6c
-	pthread_mutex_lock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_lock();
Ian Kent d7ed6c
 	co = conf_lookup(autofs_gbl_sec, NAME_SEARCH_BASE);
Ian Kent d7ed6c
 	if (!co) {
Ian Kent d7ed6c
-		pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+		defaults_mutex_unlock();
Ian Kent d7ed6c
 		return NULL;
Ian Kent d7ed6c
 	}
Ian Kent d7ed6c
 
Ian Kent d7ed6c
@@ -1417,7 +1430,7 @@ struct ldap_searchdn *defaults_get_searchdns(void)
Ian Kent d7ed6c
 
Ian Kent d7ed6c
 		new = alloc_searchdn(co->value);
Ian Kent d7ed6c
 		if (!new) {
Ian Kent d7ed6c
-			pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+			defaults_mutex_unlock();
Ian Kent d7ed6c
 			defaults_free_searchdns(sdn);
Ian Kent d7ed6c
 			return NULL;
Ian Kent d7ed6c
 		}
Ian Kent d7ed6c
@@ -1434,7 +1447,7 @@ struct ldap_searchdn *defaults_get_searchdns(void)
Ian Kent d7ed6c
 
Ian Kent d7ed6c
 		co = co->next;
Ian Kent d7ed6c
 	}
Ian Kent d7ed6c
-	pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_unlock();
Ian Kent d7ed6c
 
Ian Kent d7ed6c
 	return sdn;
Ian Kent d7ed6c
 }
Ian Kent d7ed6c
@@ -1512,9 +1525,9 @@ int defaults_master_set(void)
Ian Kent d7ed6c
 {
Ian Kent d7ed6c
 	struct conf_option *co;
Ian Kent d7ed6c
 
Ian Kent d7ed6c
-	pthread_mutex_lock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_lock();
Ian Kent d7ed6c
 	co = conf_lookup(autofs_gbl_sec, NAME_MASTER_MAP);
Ian Kent d7ed6c
-	pthread_mutex_unlock(&conf_mutex);
Ian Kent d7ed6c
+	defaults_mutex_unlock();
Ian Kent d7ed6c
 	if (co)
Ian Kent d7ed6c
 		return 1;
Ian Kent d7ed6c
 	return 0;