[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Wed Feb 10 00:39:03 UTC 2016
The branch, master has been updated
via 1d26012 asn1: Ensure asn1_tag_remaining() only ever returns -1 as an error condition.
via 697088e asn1: Make asn1_peek_tag_needed_size() use the same overflow protection as asn1_start_tag().
via f60f7a6 asn1: Protect against overlong tag lengths
from 171fdc2 ctdb-recovery: Fix newlines in log messages
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 1d26012ce84d12cba236e5a88be25e6d489c9144
Author: Jeremy Allison <jra at samba.org>
Date: Fri Feb 5 13:21:29 2016 -0800
asn1: Ensure asn1_tag_remaining() only ever returns -1 as an error condition.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Wed Feb 10 01:38:03 CET 2016 on sn-devel-144
commit 697088ef165d9ee42502d7a8ab51edc90010386e
Author: Jeremy Allison <jra at samba.org>
Date: Fri Feb 5 13:15:57 2016 -0800
asn1: Make asn1_peek_tag_needed_size() use the same overflow protection as asn1_start_tag().
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit f60f7a62e259ec518c94c08b23ef0dce9d41083b
Author: Volker Lendecke <vl at samba.org>
Date: Fri Feb 5 12:58:45 2016 -0800
asn1: Protect against overlong tag lengths
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
lib/util/asn1.c | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
Changeset truncated at 500 lines:
diff --git a/lib/util/asn1.c b/lib/util/asn1.c
index 9aa9772..9d6d416 100644
--- a/lib/util/asn1.c
+++ b/lib/util/asn1.c
@@ -593,12 +593,24 @@ static bool asn1_peek_tag_needed_size(struct asn1_data *data, uint8_t tag,
}
taglen = b;
while (n > 1) {
+ size_t tmp_taglen;
+
if (!asn1_read_uint8(data, &b)) {
data->ofs = start_ofs;
data->has_error = false;
return false;
}
- taglen = (taglen << 8) | b;
+
+ tmp_taglen = (taglen << 8) | b;
+
+ if ((tmp_taglen >> 8) != taglen) {
+ /* overflow */
+ data->ofs = start_ofs;
+ data->has_error = false;
+ return false;
+ }
+ taglen = tmp_taglen;
+
n--;
}
} else {
@@ -641,9 +653,20 @@ bool asn1_start_tag(struct asn1_data *data, uint8_t tag)
return false;
nesting->taglen = b;
while (n > 1) {
+ size_t taglen;
+
if (!asn1_read_uint8(data, &b))
return false;
- nesting->taglen = (nesting->taglen << 8) | b;
+
+ taglen = (nesting->taglen << 8) | b;
+
+ if ((taglen >> 8) != nesting->taglen) {
+ /* overflow */
+ data->has_error = true;
+ return false;
+ }
+ nesting->taglen = taglen;
+
n--;
}
} else {
@@ -698,6 +721,10 @@ int asn1_tag_remaining(struct asn1_data *data)
data->has_error = true;
return -1;
}
+ if (remaining < 0) {
+ data->has_error = true;
+ return -1;
+ }
return remaining;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list