From: Evan Hunt Date: Fri, 7 Dec 2012 20:23:58 +0000 (-0800) Subject: [master] check malloc/calloc return values X-Git-Tag: v9.10.0a1~672 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=45f36932943c02159a8907380fc79dd70e2184f1;p=thirdparty%2Fbind9.git [master] check malloc/calloc return values 3436. [bug] Check malloc/calloc return values. [RT #32088] --- diff --git a/CHANGES b/CHANGES index 7e3073e43dd..b2432938a6e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ +3436. [bug] Check malloc/calloc return values. [RT #32088] + 3435. [bug] Cross compilation support in configure was broken. [RT #32078] diff --git a/lib/dns/gen.c b/lib/dns/gen.c index 6eb325ed665..ce8cfe0437e 100644 --- a/lib/dns/gen.c +++ b/lib/dns/gen.c @@ -430,6 +430,10 @@ add(int rdclass, const char *classname, int type, const char *typename, return; newcc = (struct cc *)malloc(sizeof(*newcc)); + if (newcc == NULL) { + fprintf(stderr, "malloc() failed\n"); + exit(1); + } newcc->rdclass = rdclass; strncpy(newcc->classname, classname, TYPECLASSLEN); cc = classes; diff --git a/lib/dns/spnego.c b/lib/dns/spnego.c index 4136cbb020f..601511b5578 100644 --- a/lib/dns/spnego.c +++ b/lib/dns/spnego.c @@ -1553,6 +1553,11 @@ spnego_initial(OM_uint32 *minor_status, buf_size = 1024; buf = malloc(buf_size); + if (buf == NULL) { + *minor_status = ENOMEM; + ret = GSS_S_FAILURE; + goto end; + } do { ret = encode_NegTokenInit(buf + buf_size - 1, diff --git a/lib/dns/spnego_asn1.c b/lib/dns/spnego_asn1.c index 75c2304d8e2..efc4b0c30ef 100644 --- a/lib/dns/spnego_asn1.c +++ b/lib/dns/spnego_asn1.c @@ -269,8 +269,14 @@ decode_MechTypeList(const unsigned char *p, size_t len, MechTypeList * data, siz (data)->len = 0; (data)->val = NULL; while (ret < origlen) { + void *old = (data)->val; (data)->len++; (data)->val = realloc((data)->val, sizeof(*((data)->val)) * (data)->len); + if ((data)->val == NULL) { + (data)->val = old; + (data)->len--; + return ENOMEM; + } e = decode_MechType(p, len, &(data)->val[(data)->len - 1], &l); FORW; len = origlen - ret; diff --git a/lib/lwres/getipnode.c b/lib/lwres/getipnode.c index da00e8c8713..300376ef139 100644 --- a/lib/lwres/getipnode.c +++ b/lib/lwres/getipnode.c @@ -1119,6 +1119,8 @@ hostfromname(lwres_gabnresponse_t *name, int af) { * Copy aliases. */ he->h_aliases = malloc(sizeof(char *) * (name->naliases + 1)); + if (he->h_aliases == NULL) + goto cleanup; for (i = 0; i < name->naliases; i++) { he->h_aliases[i] = strdup(name->aliases[i]); if (he->h_aliases[i] == NULL) @@ -1130,6 +1132,8 @@ hostfromname(lwres_gabnresponse_t *name, int af) { * Copy addresses. */ he->h_addr_list = malloc(sizeof(char *) * (name->naddrs + 1)); + if (he->h_addr_list == NULL) + goto cleanup; addr = LWRES_LIST_HEAD(name->addrs); i = 0; while (addr != NULL) {