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_getpw_r.c | |
parent | 3b1b533bc3239ef6df1e40e0088e7270ac060be6 (diff) | |
download | glibc-cfe1fc1013d0e7e4863c974fa0e78891cc0a2ed2.zip glibc-cfe1fc1013d0e7e4863c974fa0e78891cc0a2ed2.tar.gz glibc-cfe1fc1013d0e7e4863c974fa0e78891cc0a2ed2.tar.bz2 |
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_getpw_r.c')
-rw-r--r-- | nscd/nscd_getpw_r.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/nscd/nscd_getpw_r.c b/nscd/nscd_getpw_r.c index 21f792b..8a4449d 100644 --- a/nscd/nscd_getpw_r.c +++ b/nscd/nscd_getpw_r.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2003, 2004, 2005, 2007 +/* Copyright (C) 1998, 1999, 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998. @@ -104,7 +104,8 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type, if (mapped != NO_MAPPING) { - struct datahead *found = __nscd_cache_search (type, key, keylen, mapped); + struct datahead *found = __nscd_cache_search (type, key, keylen, mapped, + sizeof pw_resp); if (found != NULL) { pw_name = (const char *) (&found->data[0].pwdata + 1); |