diff options
Diffstat (limited to 'nscd/nscd_helper.c')
-rw-r--r-- | nscd/nscd_helper.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/nscd/nscd_helper.c b/nscd/nscd_helper.c index db247962b9..80ee3e1dd9 100644 --- a/nscd/nscd_helper.c +++ b/nscd/nscd_helper.c @@ -481,6 +481,7 @@ __nscd_cache_search (request_type type, const char *key, size_t keylen, ref_t trail = mapped->head->array[hash]; trail = atomic_forced_read (trail); ref_t work = trail; + size_t loop_cnt = datasize / (offsetof (struct datahead, data) + datalen); int tick = 0; while (work != ENDREF && work + sizeof (struct hashentry) <= datasize) @@ -527,7 +528,7 @@ __nscd_cache_search (request_type type, const char *key, size_t keylen, work = atomic_forced_read (here->next); /* Prevent endless loops. This should never happen but perhaps the database got corrupted, accidentally or deliberately. */ - if (work == trail) + if (work == trail || loop_cnt-- > 0) break; if (tick) { |