From: Corey Farrell Date: Tue, 19 Dec 2017 04:48:52 +0000 (-0500) Subject: dns_core: Protect against array index violation. X-Git-Tag: 15.2.0-rc1~4^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=09e697c8fad69f3b1b8a95518652ac33a415e0cb;p=thirdparty%2Fasterisk.git dns_core: Protect against array index violation. Add a check to allocate_dns_record to prevent calling a pointer retrieved from beyond dns_alloc_table. ASTERISK-27495 #close Change-Id: Ie2f6e4991cea46baa12e837bd64cc22b44d322bb --- diff --git a/main/dns_core.c b/main/dns_core.c index a243b4bdd3..3e270aff7e 100644 --- a/main/dns_core.c +++ b/main/dns_core.c @@ -447,9 +447,13 @@ static dns_alloc_fn dns_alloc_table [] = { [T_SRV] = dns_srv_alloc, }; -static struct ast_dns_record *allocate_dns_record(int rr_type, struct ast_dns_query *query, const char *data, const size_t size) +static struct ast_dns_record *allocate_dns_record(unsigned int rr_type, struct ast_dns_query *query, const char *data, const size_t size) { - dns_alloc_fn allocator = dns_alloc_table[rr_type] ?: generic_record_alloc; + dns_alloc_fn allocator = generic_record_alloc; + + if (rr_type < ARRAY_LEN(dns_alloc_table) && dns_alloc_table[rr_type]) { + allocator = dns_alloc_table[rr_type]; + } return allocator(query, data, size); }