commit:     64bb0e2110fec0fb3e83fcc85a0802c5a3fdd59b
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 17 05:10:16 2021 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Oct 17 05:24:31 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=64bb0e21

net-fs/autofs: add glibc-2.34 patch

Closes: https://bugs.gentoo.org/803938
Signed-off-by: Sam James <sam <AT> gentoo.org>

 net-fs/autofs/autofs-5.1.7-r1.ebuild              |   4 +-
 net-fs/autofs/files/autofs-5.1.7-glibc-2.34.patch | 107 ++++++++++++++++++++++
 2 files changed, 110 insertions(+), 1 deletion(-)

diff --git a/net-fs/autofs/autofs-5.1.7-r1.ebuild 
b/net-fs/autofs/autofs-5.1.7-r1.ebuild
index cb4a9016866..dc05275932e 100644
--- a/net-fs/autofs/autofs-5.1.7-r1.ebuild
+++ b/net-fs/autofs/autofs-5.1.7-r1.ebuild
@@ -43,6 +43,7 @@ PATCHES=(
        "${FILESDIR}/${P}-glibc.patch"
        "${FILESDIR}/${PN}-5.1.6-musl.patch"
        "${FILESDIR}/${PN}-5.1.6-pid.patch"
+       "${FILESDIR}/${PN}-5.1.7-glibc-2.34.patch"
 )
 
 pkg_setup() {
@@ -90,7 +91,8 @@ src_configure() {
                --enable-ignore-busy
                RANLIB="$(type -P $(tc-getRANLIB))" # bug #483716
        )
-       econf "${myeconfargs[@]}"
+
+       CONFIG_SHELL="${BROOT}/bin/bash" econf "${myeconfargs[@]}"
 }
 
 src_compile() {

diff --git a/net-fs/autofs/files/autofs-5.1.7-glibc-2.34.patch 
b/net-fs/autofs/files/autofs-5.1.7-glibc-2.34.patch
new file mode 100644
index 00000000000..8b0ddd75eb2
--- /dev/null
+++ b/net-fs/autofs/files/autofs-5.1.7-glibc-2.34.patch
@@ -0,0 +1,107 @@
+https://src.fedoraproject.org/rpms/autofs/raw/rawhide/f/autofs-5.1.7-use-default-stack-size-for-threads.patch
+https://bugzilla.redhat.com/show_bug.cgi?id=1984813
+https://bugs.gentoo.org/803938
+
+autofs-5.1.7 - use default stack size for threads
+
+From: Ian Kent <ra...@themaw.net>
+
+autofs uses PTHREAD_STACK_MIN to set the stack size for threads it
+creates.
+
+In two cases it is used to reduce the stack size for long running
+service threads while it's used to allocate a larger stack for worker
+threads that can have larger memory requirements.
+
+In recent glibc releases PTHREAD_STACK_MIN is no longer a constant
+which can lead to unexpectedly different stack sizes on different
+architectures and the autofs assumption it's a constant causes a
+compile failure.
+
+The need to alter the stack size was due to observed stack overflow
+which was thought to be due the thread stack being too small for autofs
+and glibc alloca(3) usage.
+
+Quite a bit of that alloca(3) usage has been eliminated from autofs now,
+particularly those that might be allocating largish amounts of storage,
+and there has been a lot of change in glibc too so using the thread
+default stack should be ok.
+
+Signed-off-by: Ian Kent <ra...@themaw.net>
+--- a/daemon/automount.c
++++ b/daemon/automount.c
+@@ -84,7 +84,6 @@ static size_t kpkt_len;
+ /* Attributes for creating detached and joinable threads */
+ pthread_attr_t th_attr;
+ pthread_attr_t th_attr_detached;
+-size_t detached_thread_stack_size = PTHREAD_STACK_MIN * 144;
+ 
+ struct master_readmap_cond mrc = {
+       PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, NULL, 0, 0, 0, 
0};
+@@ -2620,34 +2619,6 @@ int main(int argc, char *argv[])
+               exit(1);
+       }
+ 
+-#ifdef _POSIX_THREAD_ATTR_STACKSIZE
+-      if (pthread_attr_setstacksize(
+-                      &th_attr_detached, detached_thread_stack_size)) {
+-              logerr("%s: failed to set stack size thread attribute!",
+-                     program);
+-              if (start_pipefd[1] != -1) {
+-                      res = write(start_pipefd[1], pst_stat, 
sizeof(*pst_stat));
+-                      close(start_pipefd[1]);
+-              }
+-              release_flag_file();
+-              macro_free_global_table();
+-              exit(1);
+-      }
+-#endif
+-
+-      if (pthread_attr_getstacksize(
+-                      &th_attr_detached, &detached_thread_stack_size)) {
+-              logerr("%s: failed to get detached thread stack size!",
+-                     program);
+-              if (start_pipefd[1] != -1) {
+-                      res = write(start_pipefd[1], pst_stat, 
sizeof(*pst_stat));
+-                      close(start_pipefd[1]);
+-              }
+-              release_flag_file();
+-              macro_free_global_table();
+-              exit(1);
+-      }
+-
+       info(logging, "Starting automounter version %s, master map %s",
+               version, master_list->name);
+       info(logging, "using kernel protocol version %d.%02d",
+--- a/daemon/state.c
++++ b/daemon/state.c
+@@ -1177,12 +1177,8 @@ int st_start_handler(void)
+       status = pthread_attr_init(pattrs);
+       if (status)
+               pattrs = NULL;
+-      else {
++      else
+               pthread_attr_setdetachstate(pattrs, PTHREAD_CREATE_DETACHED);
+-#ifdef _POSIX_THREAD_ATTR_STACKSIZE
+-              pthread_attr_setstacksize(pattrs, PTHREAD_STACK_MIN*4);
+-#endif
+-      }
+ 
+       status = pthread_create(&thid, pattrs, st_queue_handler, NULL);
+ 
+--- a/lib/alarm.c
++++ b/lib/alarm.c
+@@ -270,12 +270,8 @@ int alarm_start_handler(void)
+       status = pthread_attr_init(pattrs);
+       if (status)
+               pattrs = NULL;
+-      else {
++      else
+               pthread_attr_setdetachstate(pattrs, PTHREAD_CREATE_DETACHED);
+-#ifdef _POSIX_THREAD_ATTR_STACKSIZE
+-              pthread_attr_setstacksize(pattrs, PTHREAD_STACK_MIN*4);
+-#endif
+-      }
+ 
+       status = pthread_condattr_init(&condattrs);
+       if (status)

Reply via email to