diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-05-15 21:17:08 -0700 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2009-05-15 21:17:08 -0700 |
commit | cfe1fc1013d0e7e4863c974fa0e78891cc0a2ed2 (patch) | |
tree | 77134fa880e4dd6db41a701034607e67a4dd9be1 /nscd/nscd_gethst_r.c | |
parent | 3b1b533bc3239ef6df1e40e0088e7270ac060be6 (diff) | |
download | glibc-cfe1fc1013d0e7e4863c974fa0e78891cc0a2ed2.tar.gz glibc-cfe1fc1013d0e7e4863c974fa0e78891cc0a2ed2.tar.xz glibc-cfe1fc1013d0e7e4863c974fa0e78891cc0a2ed2.zip |
Robustify libc-side nscd database reader.
The nscd database mapped in processes can change at any time. We have to be more vigilant when it comes to using that memory. Test the data entries are valid in their entire size, don't read data again from memory once we verified it, and make sure the trailing pointer is not going off the deep end.
Diffstat (limited to 'nscd/nscd_gethst_r.c')
-rw-r--r-- | nscd/nscd_gethst_r.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/nscd/nscd_gethst_r.c b/nscd/nscd_gethst_r.c index aea8288594..70631fa961 100644 --- a/nscd/nscd_gethst_r.c +++ b/nscd/nscd_gethst_r.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1998-2005, 2006, 2007, 2008 Free Software Foundation, Inc. +/* Copyright (C) 1998-2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -137,7 +138,8 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type, if (mapped != NO_MAPPING) { /* No const qualifier, as it can change during garbage collection. */ - struct datahead *found = __nscd_cache_search (type, key, keylen, mapped); + struct datahead *found = __nscd_cache_search (type, key, keylen, mapped, + sizeof hst_resp); if (found != NULL) { h_name = (char *) (&found->data[0].hstdata + 1); |