diff options
author | Ulrich Drepper <drepper@gmail.com> | 2011-10-06 03:18:20 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-10-06 03:18:20 -0400 |
commit | 054c0457fd670ab29024e5e8655f507aecd68e18 (patch) | |
tree | b154a499429434c277433e7ac22097e52b05248b | |
parent | 64031225b2595620658640c0b7e01311c8b69a06 (diff) | |
download | glibc-054c0457fd670ab29024e5e8655f507aecd68e18.zip glibc-054c0457fd670ab29024e5e8655f507aecd68e18.tar.gz glibc-054c0457fd670ab29024e5e8655f507aecd68e18.tar.bz2 |
Stop crash in OOM handling in NSS
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | nss/nsswitch.c | 8 |
2 files changed, 8 insertions, 5 deletions
@@ -1,3 +1,8 @@ +2011-10-06 Ulrich Drepper <drepper@gmail.com> + + * nss/nsswitch.c (__nss_lookup_function): Fix order of deleting + from tree and freeing node. + 2011-09-25 Jiri Olsa <jolsa@redhat.com> * nss/nsswitch.c (__nss_database_lookup): Handle diff --git a/nss/nsswitch.c b/nss/nsswitch.c index ac739845..924cc84 100644 --- a/nss/nsswitch.c +++ b/nss/nsswitch.c @@ -407,6 +407,7 @@ __nss_lookup_function (service_user *ni, const char *fct_name) /* Oops. We can't instantiate this node properly. Remove it from the tree. */ __tdelete (&fct_name, &ni->known, &known_compare); + free (known); result = NULL; } else @@ -418,11 +419,8 @@ __nss_lookup_function (service_user *ni, const char *fct_name) #if !defined DO_STATIC_NSS || defined SHARED /* Load the appropriate library. */ if (nss_load_library (ni) != 0) - { - /* This only happens when out of memory. */ - free (known); - goto remove_from_tree; - } + /* This only happens when out of memory. */ + goto remove_from_tree; if (ni->library->lib_handle == (void *) -1l) /* Library not found => function not found. */ |