From: Mark Andrews Date: Thu, 13 Aug 2020 03:08:17 +0000 (+1000) Subject: IPSECKEY: require non-zero length public keys X-Git-Tag: v9.17.5~50^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d7f701480341f33cfbad3bfff9ee3876859e0ce2;p=thirdparty%2Fbind9.git IPSECKEY: require non-zero length public keys --- diff --git a/lib/dns/rdata/generic/ipseckey_45.c b/lib/dns/rdata/generic/ipseckey_45.c index 48cf39b6e89..db5f29b19ce 100644 --- a/lib/dns/rdata/generic/ipseckey_45.c +++ b/lib/dns/rdata/generic/ipseckey_45.c @@ -230,18 +230,21 @@ fromwire_ipseckey(ARGS_FROMWIRE) { switch (region.base[1]) { case 0: + if (region.length < 4) { + return (ISC_R_UNEXPECTEDEND); + } isc_buffer_forward(source, region.length); return (mem_tobuffer(target, region.base, region.length)); case 1: - if (region.length < 7) { + if (region.length < 8) { return (ISC_R_UNEXPECTEDEND); } isc_buffer_forward(source, region.length); return (mem_tobuffer(target, region.base, region.length)); case 2: - if (region.length < 19) { + if (region.length < 20) { return (ISC_R_UNEXPECTEDEND); } isc_buffer_forward(source, region.length); @@ -253,6 +256,9 @@ fromwire_ipseckey(ARGS_FROMWIRE) { RETERR(dns_name_fromwire(&name, source, dctx, options, target)); isc_buffer_activeregion(source, ®ion); isc_buffer_forward(source, region.length); + if (region.length < 1) { + return (ISC_R_UNEXPECTEDEND); + } return (mem_tobuffer(target, region.base, region.length)); default: