resolves: bug#810605 Segfault with freeradius-perl threading
This commit is contained in:
parent
75432c6005
commit
03c55b0eab
65
freeradius-perl.patch
Normal file
65
freeradius-perl.patch
Normal file
@ -0,0 +1,65 @@
|
||||
commit ecb3cd1dbedb764ab98532dae5e0b5bfc9571b00
|
||||
Author: Alan T. DeKok <aland@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);
|
@ -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@redhat.com> - 2.1.12-7
|
||||
- resolves: bug#810605 Segfault with freeradius-perl threading
|
||||
|
||||
* Tue Feb 28 2012 John Dennis <jdennis@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
|
||||
|
Loading…
Reference in New Issue
Block a user