From 8a4bf46fe7256b2713e568589b89c2275975586c Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Thu, 11 May 2017 10:01:49 +0200 Subject: getaddrinfo: Unconditionally use malloc for address list getaddrinfo has to call malloc eventually anyway, so the complexity of avoiding malloc calls is not worth potential savings. (cherry picked from commit 46ce8881ade788db56079622f47f648d4aaa003b) --- ChangeLog | 5 +++++ sysdeps/posix/getaddrinfo.c | 29 +++++------------------------ 2 files changed, 10 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index a8408db947..82dc47cfdd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-05-11 Florian Weimer + + * sysdeps/posix/getaddrinfo.c (gethosts): Remove malloc_addrmem. + (gaih_inet): Likewise. + 2017-08-23 H.J. Lu * sysdeps/x86_64/fpu/libm-test-ulps: Regenerated. diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index 43eb31365e..f6a3f4f15f 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -278,9 +278,6 @@ convert_hostent_to_gaih_addrtuple (const struct addrinfo *req, } \ else if (h != NULL) \ { \ - /* Make sure that addrmem can be freed. */ \ - if (!malloc_addrmem) \ - addrmem = NULL; \ if (!convert_hostent_to_gaih_addrtuple (req, _family,h, &addrmem)) \ { \ _res.options |= old_res_options & DEPRECATED_RES_USE_INET6; \ @@ -288,8 +285,6 @@ convert_hostent_to_gaih_addrtuple (const struct addrinfo *req, goto free_and_return; \ } \ *pat = addrmem; \ - /* The conversion uses malloc unconditionally. */ \ - malloc_addrmem = true; \ \ if (localcanon != NULL && canon == NULL) \ canon = strdupa (localcanon); \ @@ -447,7 +442,6 @@ gaih_inet (const char *name, const struct gaih_service *service, } bool malloc_name = false; - bool malloc_addrmem = false; struct gaih_addrtuple *addrmem = NULL; bool malloc_canonbuf = false; char *canonbuf = NULL; @@ -633,8 +627,6 @@ gaih_inet (const char *name, const struct gaih_service *service, goto free_and_return; } *pat = addrmem; - /* The conversion uses malloc unconditionally. */ - malloc_addrmem = true; } } else @@ -675,21 +667,11 @@ gaih_inet (const char *name, const struct gaih_service *service, bool added_canon = (req->ai_flags & AI_CANONNAME) == 0; char *addrs = air->addrs; - if (__libc_use_alloca (alloca_used - + air->naddrs * sizeof (struct gaih_addrtuple))) - addrmem = alloca_account (air->naddrs - * sizeof (struct gaih_addrtuple), - alloca_used); - else + addrmem = calloc (air->naddrs, sizeof (*addrmem)); + if (addrmem == NULL) { - addrmem = malloc (air->naddrs - * sizeof (struct gaih_addrtuple)); - if (addrmem == NULL) - { - result = -EAI_MEMORY; - goto free_and_return; - } - malloc_addrmem = true; + result = -EAI_MEMORY; + goto free_and_return; } struct gaih_addrtuple *addrfree = addrmem; @@ -1232,8 +1214,7 @@ gaih_inet (const char *name, const struct gaih_service *service, free_and_return: if (malloc_name) free ((char *) name); - if (malloc_addrmem) - free (addrmem); + free (addrmem); if (malloc_canonbuf) free (canonbuf); -- cgit v1.2.1