diff options
author | Florian Weimer <fweimer@redhat.com> | 2017-08-10 09:10:36 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2017-08-10 09:10:36 +0200 |
commit | 302434688d925134065498b4a5574f6ee6bfb9fd (patch) | |
tree | d7d539b690bee52c359a6423f46140e3b4b31873 | |
parent | 82efa1ffd43bed1494d20a4b86f6b15ac6bb5545 (diff) | |
download | glibc-302434688d925134065498b4a5574f6ee6bfb9fd.tar.gz glibc-302434688d925134065498b4a5574f6ee6bfb9fd.tar.xz glibc-302434688d925134065498b4a5574f6ee6bfb9fd.zip |
nss: Call __resolv_context_put before early return in get*_r [BZ #21932]
This corrects an oversight introduced in commit 352f4ff9a268b81ef5d4b2413f582565806e4790 (resolv: Introduce struct resolv_context). (cherry picked from commit 3016149819268b14660f791b971910ccc2cc13e5)
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | nss/getXXbyYY_r.c | 10 |
3 files changed, 16 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index 459062cc20..3127648626 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2017-08-09 Florian Weimer <fweimer@redhat.com> + + [BZ #21932] + * nss/getXXbyYY_r.c (REENTRANT_NAME): Call __resolv_context_put + before early return. + 2017-08-09 Adhemerval Zanella <adhemerval.zanella@linaro.org> [BZ #21780] diff --git a/NEWS b/NEWS index 9a64579658..ec6cf34122 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,7 @@ Version 2.26.1 The following bugs are resolved with this release: [21885] getaddrinfo: Release resolver context on error in gethosts + [21932] Unpaired __resolv_context_get in generic get*_r implementation Version 2.26 diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c index 6c547ea1ca..bce80e05dd 100644 --- a/nss/getXXbyYY_r.c +++ b/nss/getXXbyYY_r.c @@ -234,6 +234,9 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer, H_ERRNO_VAR_P)) { case -1: +# ifdef NEED__RES + __resolv_context_put (res_ctx); +# endif return errno; case 1: #ifdef NEED_H_ERRNO @@ -253,7 +256,12 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer, nscd_status = NSCD_NAME (ADD_VARIABLES, resbuf, buffer, buflen, result H_ERRNO_VAR); if (nscd_status >= 0) - return nscd_status; + { +# ifdef NEED__RES + __resolv_context_put (res_ctx); +# endif + return nscd_status; + } } #endif |