summaryrefslogtreecommitdiffstats
path: root/patches/glibc-2.7/generic/gentoo/0080_all_glibc-nscd-overflow-BZ5382.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/glibc-2.7/generic/gentoo/0080_all_glibc-nscd-overflow-BZ5382.patch')
-rw-r--r--patches/glibc-2.7/generic/gentoo/0080_all_glibc-nscd-overflow-BZ5382.patch146
1 files changed, 0 insertions, 146 deletions
diff --git a/patches/glibc-2.7/generic/gentoo/0080_all_glibc-nscd-overflow-BZ5382.patch b/patches/glibc-2.7/generic/gentoo/0080_all_glibc-nscd-overflow-BZ5382.patch
deleted file mode 100644
index 8a63cb8..0000000
--- a/patches/glibc-2.7/generic/gentoo/0080_all_glibc-nscd-overflow-BZ5382.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-http://sources.redhat.com/bugzilla/show_bug.cgi?id=5382
-
-2007-11-22 Ulrich Drepper <drepper@redhat.com>
-
- [BZ #5382]
- * nscd/nscd.h (NSCD_THREAD_STACKSIZE): Define.
- * nscd/connections.c (start_threads): Use NSCD_THREAD_STACKSIZE.
- * nscd/mem.c (gc): Don't allocate arrays on the stack if they can
- overflow it.
- Partially based on a patch by Petr Baudis <pasky@suse.cz>.
-
-===================================================================
-RCS file: /cvs/glibc/libc/nscd/nscd.h,v
-retrieving revision 1.30
-retrieving revision 1.31
----
- nscd/connections.c | 2 -
- nscd/mem.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++-----
- nscd/nscd.h | 4 +++
- 3 files changed, 55 insertions(+), 6 deletions(-)
-
-Index: glibc-2.7/nscd/nscd.h
-===================================================================
---- glibc-2.7.orig/nscd/nscd.h
-+++ glibc-2.7/nscd/nscd.h
-@@ -55,6 +55,10 @@ typedef enum
- #define RESTART_INTERVAL (60 * 60)
-
-
-+/* Stack size for worker threads. */
-+#define NSCD_THREAD_STACKSIZE 1024 * 1024 * (sizeof (void *) / 4)
-+
-+
- /* Structure describing dynamic part of one database. */
- struct database_dyn
- {
-Index: glibc-2.7/nscd/connections.c
-===================================================================
---- glibc-2.7.orig/nscd/connections.c
-+++ glibc-2.7/nscd/connections.c
-@@ -1837,7 +1837,7 @@ start_threads (void)
- pthread_attr_init (&attr);
- pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
- /* Use 1MB stacks, twice as much for 64-bit architectures. */
-- pthread_attr_setstacksize (&attr, 1024 * 1024 * (sizeof (void *) / 4));
-+ pthread_attr_setstacksize (&attr, NSCD_THREAD_STACKSIZE);
-
- /* We allow less than LASTDB threads only for debugging. */
- if (debug_level == 0)
-Index: glibc-2.7/nscd/mem.c
-===================================================================
---- glibc-2.7.orig/nscd/mem.c
-+++ glibc-2.7/nscd/mem.c
-@@ -34,6 +34,11 @@
- #include "nscd.h"
-
-
-+/* Wrapper functions with error checking for standard functions. */
-+extern void *xmalloc (size_t n);
-+extern void *xcalloc (size_t n, size_t s);
-+
-+
- static int
- sort_he (const void *p1, const void *p2)
- {
-@@ -69,6 +74,10 @@ sort_he_data (const void *p1, const void
- #define ALLBITS ((((BITMAP_T) 1) << BITS) - 1)
- #define HIGHBIT (((BITMAP_T) 1) << (BITS - 1))
-
-+/* Maximum size of stack frames we allow the thread to use. We use
-+ 80% of the thread stack size. */
-+#define MAX_STACK_USE ((8 * NSCD_THREAD_STACKSIZE) / 10)
-+
-
- static void
- markrange (BITMAP_T *mark, ref_t start, size_t len)
-@@ -117,13 +126,43 @@ gc (struct database_dyn *db)
- we have to look at the memory. We use a mark and sweep algorithm
- where the marks are placed in this array. */
- assert (db->head->first_free % BLOCK_ALIGN == 0);
-- BITMAP_T mark[(db->head->first_free / BLOCK_ALIGN + BITS - 1) / BITS];
-- memset (mark, '\0', sizeof (mark));
-+
-+ BITMAP_T *mark;
-+ bool mark_use_malloc;
-+ size_t stack_used = 0;
-+ size_t memory_needed = ((db->head->first_free / BLOCK_ALIGN + BITS - 1)
-+ / BITS) * sizeof (BITMAP_T);
-+ if (memory_needed <= MAX_STACK_USE)
-+ {
-+ mark = (BITMAP_T *) alloca (memory_needed);
-+ mark_use_malloc = false;
-+ memset (mark, '\0', memory_needed);
-+ stack_used = memory_needed;
-+ }
-+ else
-+ {
-+ mark = (BITMAP_T *) xcalloc (1, memory_needed);
-+ mark_use_malloc = true;
-+ }
-
- /* Create an array which can hold pointer to all the entries in hash
- entries. */
-- struct hashentry *he[db->head->nentries];
-- struct hashentry *he_data[db->head->nentries];
-+ memory_needed = 2 * db->head->nentries * sizeof (struct hashentry *);
-+ struct hashentry **he;
-+ struct hashentry **he_data;
-+ bool he_use_malloc;
-+ if (stack_used + memory_needed <= MAX_STACK_USE)
-+ {
-+ he = alloca (db->head->nentries * sizeof (struct hashentry *));
-+ he_data = alloca (db->head->nentries * sizeof (struct hashentry *));
-+ he_use_malloc = false;
-+ }
-+ else
-+ {
-+ he = xmalloc (memory_needed);
-+ he_data = &he[db->head->nentries * sizeof (struct hashentry *)];
-+ he_use_malloc = true;
-+ }
-
- size_t cnt = 0;
- for (size_t idx = 0; idx < db->head->module; ++idx)
-@@ -455,6 +494,11 @@ gc (struct database_dyn *db)
- out:
- pthread_mutex_unlock (&db->memlock);
- pthread_rwlock_unlock (&db->lock);
-+
-+ if (he_use_malloc)
-+ free (he);
-+ if (mark_use_malloc)
-+ free (mark);
- }
-
-
-@@ -481,7 +525,8 @@ mempool_alloc (struct database_dyn *db,
- {
- /* Try to resize the database. Grow size of 1/8th. */
- size_t oldtotal = (sizeof (struct database_pers_head)
-- + roundup (db->head->module * sizeof (ref_t), ALIGN)
-+ + roundup (db->head->module * sizeof (ref_t),
-+ ALIGN)
- + db->head->data_size);
- size_t new_data_size = (db->head->data_size
- + MAX (2 * len, db->head->data_size / 8));