[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Jan 29 01:03:03 UTC 2020


The branch, master has been updated
       via  2d5b7c9a50d lib: asn1.c: Prevent ASN1_ENUMERATED from wrapping.
      from  620987449cc lib/util: use better linux os detection in gpfs configure

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


- Log -----------------------------------------------------------------
commit 2d5b7c9a50d1514cf6e5aa3f1cc4f4b5c3c6ff22
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Jan 23 13:59:18 2020 -0800

    lib: asn1.c: Prevent ASN1_ENUMERATED from wrapping.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14238
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Douglas Bagnall <dbagnall at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Wed Jan 29 01:02:04 UTC 2020 on sn-devel-184

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

Summary of changes:
 lib/util/asn1.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/asn1.c b/lib/util/asn1.c
index 51da5424956..6ae54d4cf20 100644
--- a/lib/util/asn1.c
+++ b/lib/util/asn1.c
@@ -1024,9 +1024,10 @@ bool asn1_read_BitString(struct asn1_data *data, TALLOC_CTX *mem_ctx, DATA_BLOB
 	return true;
 }
 
-/* read an integer */
+/* read a non-negative enumerated value */
 bool asn1_read_enumerated(struct asn1_data *data, int *v)
 {
+	unsigned int val_will_wrap = (0xFF << ((sizeof(int)*8)-8));
 	*v = 0;
 
 	if (!asn1_start_tag(data, ASN1_ENUMERATED)) return false;
@@ -1035,7 +1036,22 @@ bool asn1_read_enumerated(struct asn1_data *data, int *v)
 		if (!asn1_read_uint8(data, &b)) {
 			return false;
 		}
+		if (*v & val_will_wrap) {
+			/*
+			 * There is something already in
+			 * the top byte of the int. If we
+			 * shift left by 8 it's going to
+			 * wrap. Prevent this.
+			 */
+			data->has_error = true;
+			return false;
+		}
 		*v = (*v << 8) + b;
+		if (*v < 0) {
+			/* ASN1_ENUMERATED can't be -ve. */
+			data->has_error = true;
+			return false;
+		}
 	}
 	return asn1_end_tag(data);
 }


-- 
Samba Shared Repository



More information about the samba-cvs mailing list