[SCM] Samba Shared Repository - branch master updated

Andrew Bartlett abartlet at samba.org
Tue Jan 5 23:34:04 UTC 2016


The branch, master has been updated
       via  a44e4e9 ldb: validate ldb_dn_set_component input parameters even more strictly
       via  30e92d0 ldb: Explain why this use of talloc_memdup() is safe
       via  084bab5 ldb: Be strict about talloc_memdup() and passed in buffers in ldb_dn_set_component()
      from  ff94a01 travis: Add metadata file for the Travis CI Open Source cloud build/test service

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit a44e4e932347c4c73bfcd9ee227a5105b5db09f2
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 4 12:13:40 2016 +1300

    ldb: validate ldb_dn_set_component input parameters even more strictly
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Jelmer Vernooij <jelmer at samba.org>
    
    Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
    Autobuild-Date(master): Wed Jan  6 00:33:21 CET 2016 on sn-devel-144

commit 30e92d0a325d3829fa90d19e1b7af35a3db859f1
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 4 12:13:04 2016 +1300

    ldb: Explain why this use of talloc_memdup() is safe
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Jelmer Vernooij <jelmer at samba.org>

commit 084bab5a06fda352df5c8b902aa36068b7bcc396
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 4 12:12:37 2016 +1300

    ldb: Be strict about talloc_memdup() and passed in buffers in ldb_dn_set_component()
    
    This ensures we do not over-read the source buffer, but still NUL terminate.
    
    This may be related to debuain bug: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=808769
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Jelmer Vernooij <jelmer at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 lib/ldb/common/ldb_dn.c | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)


Changeset truncated at 500 lines:

diff --git a/lib/ldb/common/ldb_dn.c b/lib/ldb/common/ldb_dn.c
index dfd3b58..5bf72ac 100644
--- a/lib/ldb/common/ldb_dn.c
+++ b/lib/ldb/common/ldb_dn.c
@@ -586,6 +586,12 @@ static bool ldb_dn_explode(struct ldb_dn *dn)
 
 				p++;
 				*d++ = '\0';
+
+				/*
+				 * This talloc_memdup() is OK with the
+				 * +1 because *d has been set to '\0'
+				 * just above
+				 */
 				dn->components[dn->comp_num].value.data = \
 					(uint8_t *)talloc_memdup(dn->components, dt, l + 1);
 				dn->components[dn->comp_num].value.length = l;
@@ -708,6 +714,11 @@ static bool ldb_dn_explode(struct ldb_dn *dn)
 	}
 
 	*d++ = '\0';
+	/*
+	 * This talloc_memdup() is OK with the
+	 * +1 because *d has been set to '\0'
+	 * just above.
+	 */
 	dn->components[dn->comp_num].value.length = l;
 	dn->components[dn->comp_num].value.data =
 		(uint8_t *)talloc_memdup(dn->components, dt, l + 1);
@@ -1901,17 +1912,37 @@ int ldb_dn_set_component(struct ldb_dn *dn, int num,
 		return LDB_ERR_OTHER;
 	}
 
+	if (num < 0) {
+		return LDB_ERR_OTHER;
+	}
+
+	if (v.length > v.length + 1) {
+		return LDB_ERR_OTHER;
+	}
+
 	n = talloc_strdup(dn, name);
 	if ( ! n) {
 		return LDB_ERR_OTHER;
 	}
 
 	v.length = val.length;
-	v.data = (uint8_t *)talloc_memdup(dn, val.data, v.length+1);
+
+	/*
+	 * This is like talloc_memdup(dn, v.data, v.length + 1), but
+	 * avoids the over-read
+	 */
+	v.data = (uint8_t *)talloc_size(dn, v.length+1);
 	if ( ! v.data) {
 		talloc_free(n);
 		return LDB_ERR_OTHER;
 	}
+	memcpy(v.data, val.data, val.length);
+
+	/*
+	 * Enforce NUL termination outside the stated length, as is
+	 * traditional in LDB
+	 */
+	v.data[v.length] = '\0';
 
 	talloc_free(dn->components[num].name);
 	talloc_free(dn->components[num].value.data);


-- 
Samba Shared Repository



More information about the samba-cvs mailing list