changeset 10260:2896314db48b

6865459 cctime in ndmpd returns pointer to a buffer on its stack 6859840 ndmp backup fails : ndmpd crash
author Reza Sabdar <Reza.Sabdar@Sun.COM>
date Wed, 05 Aug 2009 11:20:52 -0700
parents 139695f850ed
children f3fec2334981
files usr/src/cmd/ndmpd/ndmp/ndmpd_util.c usr/src/cmd/ndmpd/tlm/tlm_backup_reader.c
diffstat 2 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/ndmpd/ndmp/ndmpd_util.c	Wed Aug 05 11:12:45 2009 +0800
+++ b/usr/src/cmd/ndmpd/ndmp/ndmpd_util.c	Wed Aug 05 11:20:52 2009 -0700
@@ -2182,7 +2182,7 @@
 cctime(time_t *t)
 {
 	char *bp, *cp;
-	char tbuf[BUFSIZ];
+	static char tbuf[BUFSIZ];
 
 	if (!t)
 		return ("");
@@ -2190,7 +2190,9 @@
 	if (*t == (time_t)0)
 		return ("the epoch");
 
-	bp = ctime_r(t, tbuf, BUFSIZ);
+	if ((bp = ctime_r(t, tbuf, BUFSIZ)) == NULL)
+		return ("");
+
 	cp = strchr(bp, '\n');
 	if (cp)
 		*cp = '\0';
--- a/usr/src/cmd/ndmpd/tlm/tlm_backup_reader.c	Wed Aug 05 11:12:45 2009 +0800
+++ b/usr/src/cmd/ndmpd/tlm/tlm_backup_reader.c	Wed Aug 05 11:20:52 2009 -0700
@@ -72,6 +72,7 @@
     tlm_cmd_t *);
 
 extern  libzfs_handle_t *zlibh;
+extern  mutex_t zlib_mtx;
 
 
 /*
@@ -1262,8 +1263,10 @@
 	(void) strlcpy(mhp->nh_magic, ZFS_META_MAGIC, sizeof (mhp->nh_magic));
 	(void) strlcpy(mhp->nh_dataset, dataset, sizeof (mhp->nh_dataset));
 
+	(void) mutex_lock(&zlib_mtx);
 	if ((mhp->nh_handle = zfs_open(zlibh, dataset,
 	    ZFS_TYPE_DATASET)) == NULL) {
+		(void) mutex_unlock(&zlib_mtx);
 		free(mhp);
 		return (ZPROP_INVAL);
 	}
@@ -1283,6 +1286,7 @@
 		    nvlist_lookup_string(ulist, ZPROP_VALUE, &sval) != 0 ||
 		    nvlist_lookup_string(ulist, ZPROP_SOURCE, &ssrc) != 0) {
 			zfs_close(mhp->nh_handle);
+			(void) mutex_unlock(&zlib_mtx);
 			free(mhp);
 			return (-1);
 		}
@@ -1296,6 +1300,7 @@
 	}
 
 	zfs_close(mhp->nh_handle);
+	(void) mutex_unlock(&zlib_mtx);
 
 	if ((wbuf = get_write_buffer(size, &actual_size, TRUE,
 	    lcmd)) != NULL) {