From 95724d1bd53ae87f72e6388cb7323dbd8f84be9d Mon Sep 17 00:00:00 2001 From: Stefan Wagner Date: Sun, 6 Nov 2016 23:10:10 +0100 Subject: testing/libmilter: set default pthread stack size to 8 MB This patch tries to fix various crashes for applications depending on libmilter by setting the stack size for pthreads to 8 MB. The default stack size for musl libc is set to 80 KB whereas glibc has it set to 8 MB. This causes problems when a large amount of memory is allocated on the stack. For example, opendkim allocates blocks of 64 KB multiple times, which causes libmilter (and therefore opendkim) to crash. Maybe a stack size of 1 MB or 2 MB would be sufficient, but as opendkim depends on the default glibc behavior, 8 MB should be safe. I know this patch is kind of ugly, a better solution may be to file a request for opendkim to allocate large blocks of memory on the heap. But as libmilter/opendkim are fairly unusable at the moment, I suggest to apply this patch as long as these packages are in testing. Fixes https://bugs.alpinelinux.org/issues/6360 --- testing/libmilter/default-pthread-stacksize.patch | 44 +++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 testing/libmilter/default-pthread-stacksize.patch (limited to 'testing/libmilter/default-pthread-stacksize.patch') diff --git a/testing/libmilter/default-pthread-stacksize.patch b/testing/libmilter/default-pthread-stacksize.patch new file mode 100644 index 0000000000..4e3524c230 --- /dev/null +++ b/testing/libmilter/default-pthread-stacksize.patch @@ -0,0 +1,44 @@ +Set default pthread stack size to 8 MB + +This patch tries to fix various crashes for applications depending on +libmilter by setting the stack size for pthreads to 8 MB. The default +stack size for musl libc is set to 80 KB whereas glibc has it set +to 8 MB. This causes problems when a large amount of memory is +allocated on the stack. + +For example, opendkim allocates blocks of 64 KB multiple times, which +causes libmilter (and therefore opendkim) to crash. +Maybe a stack size of 1 MB or 2 MB would be sufficient, but as opendkim +depends on the default glibc behavior, 8 MB should be safe. + +Fixes https://bugs.alpinelinux.org/issues/6360 + +--- a/libmilter/libmilter.h ++++ b/libmilter/libmilter.h +@@ -127,10 +127,10 @@ + # define MI_SOCK_READ(s, b, l) read(s, b, l) + # define MI_SOCK_READ_FAIL(x) ((x) < 0) + # define MI_SOCK_WRITE(s, b, l) write(s, b, l) +- +-# define thread_create(ptid,wr,arg) pthread_create(ptid, NULL, wr, arg) + # define sthread_get_id() pthread_self() + ++extern int thread_create(pthread_t *ptid, void *(*wr) (void *), void *arg); ++ + typedef pthread_mutex_t smutex_t; + # define smutex_init(mp) (pthread_mutex_init(mp, NULL) == 0) + # define smutex_destroy(mp) (pthread_mutex_destroy(mp) == 0) +--- a/libmilter/main.c ++++ b/libmilter/main.c +@@ -16,6 +16,12 @@ + #include + #include + ++int thread_create(pthread_t *ptid, void *(*wr) (void *), void *arg) { ++ pthread_attr_t attr; ++ pthread_attr_init(&attr); ++ pthread_attr_setstacksize(&attr,8*1024*1024); ++ return pthread_create(ptid, &attr, wr, arg); ++} + + static smfiDesc_ptr smfi = NULL; -- cgit v1.2.3