aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-06-29 23:33:38 -0400
committerUlrich Drepper <drepper@gmail.com>2011-06-29 23:33:38 -0400
commitcf3b23ffcd95841f1d36a3c808c415b41d70b3a9 (patch)
treefa9fe9952e8ff971be44741bfafb4b11e6477732
parent5c0b8d9013560bb24805844d31a7fb3959ee1e8d (diff)
downloadglibc-cf3b23ffcd95841f1d36a3c808c415b41d70b3a9.zip
glibc-cf3b23ffcd95841f1d36a3c808c415b41d70b3a9.tar.gz
glibc-cf3b23ffcd95841f1d36a3c808c415b41d70b3a9.tar.bz2
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--ChangeLog6
-rw-r--r--nscd/grpcache.c5
-rw-r--r--nscd/servicescache.c5
3 files changed, 12 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index b4d30ca..16187bb 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 fa21929..0e7f81f 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, &notfound, total,
- MSG_NOSIGNAL));
+ if (fd != -1)
+ written = TEMP_FAILURE_RETRY (send (fd, &notfound, 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 2dd1cc5..b0a2977 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, &notfound, total,
- MSG_NOSIGNAL));
+ if (fd != -1)
+ written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
+ MSG_NOSIGNAL));
dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len,
1);