[freeradius] resolves: bug#810605 Segfault with freeradius-perl threading
John Dennis
jdennis at fedoraproject.org
Sat Apr 14 18:13:57 UTC 2012
commit 03c55b0eab5983dc5bf48890e5a4eeabc6c2fa25
Author: John Dennis <jdennis at redhat.com>
Date: Sat Apr 14 14:13:37 2012 -0400
resolves: bug#810605 Segfault with freeradius-perl threading
freeradius-perl.patch | 65 +++++++++++++++++++++++++++++++++++++++++++++++++
freeradius.spec | 7 ++++-
2 files changed, 71 insertions(+), 1 deletions(-)
---
diff --git a/freeradius-perl.patch b/freeradius-perl.patch
new file mode 100644
index 0000000..8e45142
--- /dev/null
+++ b/freeradius-perl.patch
@@ -0,0 +1,65 @@
+commit ecb3cd1dbedb764ab98532dae5e0b5bfc9571b00
+Author: Alan T. DeKok <aland at freeradius.org>
+Date: Thu Dec 1 14:21:03 2011 +0100
+
+ Perl clone should be called sequentially, not in parallel.
+
+ Adding a mutex fixes this.
+
+ Patch from Eike Dehling
+
+diff --git a/src/modules/rlm_perl/rlm_perl.c b/src/modules/rlm_perl/rlm_perl.c
+index 5c82e89..4682ba5 100644
+--- a/src/modules/rlm_perl/rlm_perl.c
++++ b/src/modules/rlm_perl/rlm_perl.c
+@@ -77,6 +77,8 @@ typedef struct perl_inst {
+ char *perl_flags;
+ PerlInterpreter *perl;
+ pthread_key_t *thread_key;
++
++ pthread_mutex_t clone_mutex;
+ } PERL_INST;
+ /*
+ * A mapping of configuration file names to internal variables.
+@@ -434,6 +436,8 @@ static int perl_instantiate(CONF_SECTION *conf, void **instance)
+ */
+
+ #ifdef USE_ITHREADS
++ pthread_mutex_init(&inst->clone_mutex, NULL);
++
+ inst->thread_key = rad_malloc(sizeof(*inst->thread_key));
+ memset(inst->thread_key,0,sizeof(*inst->thread_key));
+
+@@ -656,8 +660,10 @@ static int rlmperl_call(void *instance, REQUEST *request, char *function_name)
+ HV *rad_request_hv;
+ HV *rad_request_proxy_hv;
+ HV *rad_request_proxy_reply_hv;
+-
++
+ #ifdef USE_ITHREADS
++ pthread_mutex_lock(&inst->clone_mutex);
++
+ PerlInterpreter *interp;
+
+ interp = rlm_perl_clone(inst->perl,inst->thread_key);
+@@ -665,9 +671,12 @@ static int rlmperl_call(void *instance, REQUEST *request, char *function_name)
+ dTHXa(interp);
+ PERL_SET_CONTEXT(interp);
+ }
++
++ pthread_mutex_unlock(&inst->clone_mutex);
+ #else
+ PERL_SET_CONTEXT(inst->perl);
+ #endif
++
+ {
+ dSP;
+
+@@ -974,6 +983,7 @@ static int perl_detach(void *instance)
+
+ #ifdef USE_ITHREADS
+ rlm_perl_destruct(inst->perl);
++ pthread_mutex_destroy(&inst->clone_mutex);
+ #else
+ perl_destruct(inst->perl);
+ perl_free(inst->perl);
diff --git a/freeradius.spec b/freeradius.spec
index b14d8e7..ae6be4b 100644
--- a/freeradius.spec
+++ b/freeradius.spec
@@ -1,7 +1,7 @@
Summary: High-performance and highly configurable free RADIUS server
Name: freeradius
Version: 2.1.12
-Release: 6%{?dist}
+Release: 7%{?dist}
License: GPLv2+ and LGPLv2+
Group: System Environment/Daemons
URL: http://www.freeradius.org/
@@ -18,6 +18,7 @@ Patch3: freeradius-man.patch
Patch4: freeradius-unix-passwd-expire.patch
Patch5: freeradius-radeapclient-ipv6.patch
Patch6: freeradius-postgres-sql.patch
+Patch7: freeradius-perl.patch
Obsoletes: freeradius-devel
Obsoletes: freeradius-libs
@@ -154,6 +155,7 @@ This plugin provides the unixODBC support for the FreeRADIUS server project.
%patch4 -p1 -b unix-passwd-expire
%patch5 -p1 -b radeapclient-ipv6
%patch6 -p1 -b postgres-sql
+%patch7 -p1 -b perl
# Some source files mistakenly have execute permissions set
find $RPM_BUILD_DIR/freeradius-server-%{version} \( -name '*.c' -o -name '*.h' \) -a -perm /0111 -exec chmod a-x {} +
@@ -598,6 +600,9 @@ exit 0
%{_libdir}/freeradius/rlm_sql_unixodbc-%{version}.so
%changelog
+* Sat Apr 14 2012 John Dennis <jdennis at redhat.com> - 2.1.12-7
+- resolves: bug#810605 Segfault with freeradius-perl threading
+
* Tue Feb 28 2012 John Dennis <jdennis at redhat.com> - 2.1.12-6
Fixing bugs in RHEL6 rebase, applying fixes here as well
resolves: bug#700870 freeradius not compiled with --with-udpfromto
More information about the scm-commits
mailing list