diff options
author | Ulrich Drepper <drepper@gmail.com> | 2011-06-29 23:33:38 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-06-29 23:33:38 -0400 |
commit | cf3b23ffcd95841f1d36a3c808c415b41d70b3a9 (patch) | |
tree | fa9fe9952e8ff971be44741bfafb4b11e6477732 | |
parent | 5c0b8d9013560bb24805844d31a7fb3959ee1e8d (diff) | |
download | glibc-cf3b23ffcd95841f1d36a3c808c415b41d70b3a9.tar.gz glibc-cf3b23ffcd95841f1d36a3c808c415b41d70b3a9.tar.xz glibc-cf3b23ffcd95841f1d36a3c808c415b41d70b3a9.zip |
Avoid write to invalid file descriptor in nscd
When readding entries to the group and services cache and the lookup is unsuccesful, we tried to write the notfound record. Just don't do it in this case.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | nscd/grpcache.c | 5 | ||||
-rw-r--r-- | nscd/servicescache.c | 5 |
3 files changed, 12 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog index b4d30ca33a..16187bb087 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-06-29 Ulrich Drepper <drepper@gmail.com> + + * nscd/grpcache.c (cache_addgr): Don't write notfound reply if we + are re-adding the entry. + * nscd/servicescache.c (cache_addserv): Likewise. + 2011-06-28 Ulrich Drepper <drepper@gmail.com> [BZ #12935] diff --git a/nscd/grpcache.c b/nscd/grpcache.c index fa21929014..0e7f81f535 100644 --- a/nscd/grpcache.c +++ b/nscd/grpcache.c @@ -114,8 +114,9 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req, case. */ total = sizeof (notfound); - written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, - MSG_NOSIGNAL)); + if (fd != -1) + written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, + MSG_NOSIGNAL)); dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1); diff --git a/nscd/servicescache.c b/nscd/servicescache.c index 2dd1cc5675..b0a2977935 100644 --- a/nscd/servicescache.c +++ b/nscd/servicescache.c @@ -104,8 +104,9 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req, case. */ total = sizeof (notfound); - written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, - MSG_NOSIGNAL)); + if (fd != -1) + written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, + MSG_NOSIGNAL)); dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1); |