Blame SOURCES/autofs-5.1.8-fix-sysconf-return-handling.patch

b07c2e
autofs-5.1.8 - fix sysconf(3) return handling
b07c2e
b07c2e
From: Fabian Groffen <grobian@gentoo.org>
b07c2e
b07c2e
The sysconf(3) return handling doesn't handle a -1 return with errno
b07c2e
not changed which indicated a maximum or minimum limit that's not
b07c2e
known.
b07c2e
b07c2e
Add handling of this case.
b07c2e
b07c2e
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
b07c2e
Signed-off-by: Ian Kent <raven@themaw.net>
b07c2e
---
b07c2e
 CHANGELOG    |    1 +
b07c2e
 lib/mounts.c |   13 +++++++++++--
b07c2e
 2 files changed, 12 insertions(+), 2 deletions(-)
b07c2e
b07c2e
--- autofs-5.1.4.orig/CHANGELOG
b07c2e
+++ autofs-5.1.4/CHANGELOG
b07c2e
@@ -91,6 +91,7 @@
b07c2e
 - fix use after free in tree_mapent_delete_offset_tree().
b07c2e
 - fix memory leak in xdr_exports().
b07c2e
 - avoid calling pthread_getspecific() with NULL key_thread_attempt_id.
b07c2e
+- fix sysconf(3) return handling.
b07c2e
 
b07c2e
 xx/xx/2018 autofs-5.1.5
b07c2e
 - fix flag file permission.
b07c2e
--- autofs-5.1.4.orig/lib/mounts.c
b07c2e
+++ autofs-5.1.4/lib/mounts.c
b07c2e
@@ -2385,11 +2385,17 @@ void set_tsd_user_vars(unsigned int logo
b07c2e
 
b07c2e
 	/* Try to get passwd info */
b07c2e
 
b07c2e
+	/* sysconf may return -1 with unchanged errno to indicate unlimited
b07c2e
+	 * size, same for the call for _SC_GETGR_R_SIZE_MAX  below
b07c2e
+	 */
b07c2e
+	errno = 0;
b07c2e
 	tmplen = sysconf(_SC_GETPW_R_SIZE_MAX);
b07c2e
-	if (tmplen < 0) {
b07c2e
+	if (tmplen < 0 && errno != 0) {
b07c2e
 		error(logopt, "failed to get buffer size for getpwuid_r");
b07c2e
 		goto free_tsv;
b07c2e
 	}
b07c2e
+	if (tmplen < 0)
b07c2e
+		tmplen = 1024;	/* assume something reasonable */
b07c2e
 
b07c2e
 	pw_tmp = malloc(tmplen + 1);
b07c2e
 	if (!pw_tmp) {
b07c2e
@@ -2422,11 +2428,14 @@ void set_tsd_user_vars(unsigned int logo
b07c2e
 
b07c2e
 	/* Try to get group info */
b07c2e
 
b07c2e
+	errno = 0;
b07c2e
 	grplen = sysconf(_SC_GETGR_R_SIZE_MAX);
b07c2e
-	if (grplen < 0) {
b07c2e
+	if (grplen < 0 && errno != 0) {
b07c2e
 		error(logopt, "failed to get buffer size for getgrgid_r");
b07c2e
 		goto free_tsv_home;
b07c2e
 	}
b07c2e
+	if (grplen < 0)
b07c2e
+		grplen = 1024;
b07c2e
 
b07c2e
 	gr_tmp = NULL;
b07c2e
 	status = ERANGE;