rpms/sbcl/devel sbcl-0.9.4-personality.patch, NONE, 1.1 sbcl.spec, 1.12, 1.13 sbcl-0.9.4-ADDR_NO_RANDOMIZE-argv0.patch, 1.1, NONE sbcl-0.9.4-ADDR_NO_RANDOMIZE-proc.patch, 1.1, NONE
Rex Dieter (rdieter)
fedora-extras-commits at redhat.com
Wed Sep 21 13:47:18 UTC 2005
Author: rdieter
Update of /cvs/extras/rpms/sbcl/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv2780
Modified Files:
sbcl.spec
Added Files:
sbcl-0.9.4-personality.patch
Removed Files:
sbcl-0.9.4-ADDR_NO_RANDOMIZE-argv0.patch
sbcl-0.9.4-ADDR_NO_RANDOMIZE-proc.patch
Log Message:
* Mon Sep 19 2005 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.4-17
- rework personality/reexec patch (execve -> execvp)
sbcl-0.9.4-personality.patch:
--- NEW FILE sbcl-0.9.4-personality.patch ---
--- sbcl-0.9.4/src/runtime/os.h.ADDR_NO_RANDOMIZE 2005-07-14 10:41:20.000000000 -0500
+++ sbcl-0.9.4/src/runtime/os.h 2005-09-13 11:23:31.319884384 -0500
@@ -50,7 +50,7 @@
/* Do anything we need to do when starting up the runtime environment
* in this OS. */
-extern void os_init(void);
+extern void os_init(char *argv[]);
/* Install any OS-dependent low-level signal handlers which are needed
* by the runtime environment. E.g. the signals raised by a violation
--- sbcl-0.9.4/src/runtime/linux-os.c.ADDR_NO_RANDOMIZE 2005-08-12 14:08:19.000000000 -0500
+++ sbcl-0.9.4/src/runtime/linux-os.c 2005-09-13 11:26:47.110833967 -0500
@@ -44,6 +44,7 @@
#include <sys/stat.h>
#include <unistd.h>
#include <linux/version.h>
+#include <sys/personality.h>
#include "validate.h"
#include "thread.h"
@@ -92,7 +93,7 @@
int linux_no_threads_p = 0;
void
-os_init(void)
+os_init(char *argv[])
{
/* Conduct various version checks: do we have enough mmap(), is
* this a sparc running 2.2, can we do threads? */
@@ -117,7 +118,7 @@
FSHOW((stderr,"linux kernel %d.%d predates 2.4;\n enabling workarounds for SPARC kernel bugs in signal handling.\n", major_version,minor_version));
linux_sparc_siginfo_bug = 1;
#endif
- }
+ }
#ifdef LISP_FEATURE_SB_THREAD
futex_wait(futex,-1);
if(errno==ENOSYS) linux_no_threads_p = 1;
@@ -125,6 +126,28 @@
fprintf(stderr,"Linux with NPTL support (e.g. kernel 2.6 or newer) required for \nthread-enabled SBCL. Disabling thread support.\n\n");
#endif
os_vm_page_size = getpagesize();
+
+ /* KLUDGE: Disable memory randomization on new Linux kernels
+ * by setting a personality flag and re-executing. (We need
+ * to re-execute, since the memory maps that can conflict with
+ * the SBCL spaces have already been done at this point).
+ */
+#if defined(LISP_FEATURE_X86)
+ if ((major_version == 2) && (minor_version >= 6) || (major_version >= 3)) {
+ long pers = personality(-1);
+ /* 0x40000 aka. ADDR_NO_RANDOMIZE */
+ if (!(pers & 0x40000)) {
+ if (personality(pers | 0x40000) != -1) {
+ execvp(argv[0], argv);
+ }
+ /* Either changing the personality or (re)exec failed. Either
+ * way we might as well continue, and hope that the random
+ * memory maps are ok this time around.
+ */
+ fprintf(stderr, "WARNING: Couldn't re-execute SBCL with the proper personality flags. Trying to continue anyway.\n");
+ }
+ }
+#endif
}
--- sbcl-0.9.4/src/runtime/runtime.c.ADDR_NO_RANDOMIZE 2005-09-13 11:23:31.315884548 -0500
+++ sbcl-0.9.4/src/runtime/runtime.c 2005-09-13 11:23:31.323884220 -0500
@@ -194,7 +194,7 @@
/* KLUDGE: os_vm_page_size is set by os_init(), and on some
* systems (e.g. Alpha) arch_init() needs need os_vm_page_size, so
* it must follow os_init(). -- WHN 2000-01-26 */
- os_init();
+ os_init(argv);
arch_init();
gc_init();
validate();
Index: sbcl.spec
===================================================================
RCS file: /cvs/extras/rpms/sbcl/devel/sbcl.spec,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- sbcl.spec 16 Sep 2005 19:54:36 -0000 1.12
+++ sbcl.spec 21 Sep 2005 13:47:15 -0000 1.13
@@ -7,6 +7,7 @@
#define sbcl_bootstrap cmucl
#define sbcl_bootstrap clisp
+%if "%{?bootstrap}" == "%{nil}"
%if "%{?fedora}" >= "3"
BuildRequires:setarch
%define setarch setarch %{_target_cpu}
@@ -20,16 +21,17 @@
BuildRequires:setarch
%define setarch setarch %{_target_cpu}
%endif
+%endif
Name: sbcl
Summary: Steel Bank Common Lisp
Version: 0.9.4
-Release: 15%{?dist}
+Release: 17%{?dist}
License: BSD/MIT
Group: Development/Languages
URL: http://sbcl.sourceforge.net/
-Source0: http://dl.sourceforge.net/sourceforge/sbcl/sbcl-%{version}-source.tar.bz2
+Source0: http://dl.sourceforge.net/sourceforge/sbcl/sbcl-%{version}-source.tar.bz2
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
ExclusiveArch: %{ix86} x86_64
@@ -51,11 +53,7 @@
%endif
Patch1: sbcl-0.8.18-default-sbcl-home.patch
-# See http://sourceforge.net/mailarchive/message.php?msg_id=12787069
-# use /proc/self/exe
-#Patch2: sbcl-0.9.4-ADDR_NO_RANDOMIZE-proc.patch
-# use argv[0]
-Patch2: sbcl-0.9.4-ADDR_NO_RANDOMIZE-argv0.patch
+Patch2: sbcl-0.9.4-personality.patch
Patch3: sbcl-0.9.4-optflags.patch
Patch4: sbcl-0.9.4-LIB_DIR.patch
@@ -79,7 +77,7 @@
#sed -i -e "s|/usr/local/lib/sbcl/|%{_libdir}/sbcl/|" src/runtime/runtime.c
#or patch to use SBCL_HOME env var
%patch1 -p0 -b .default-sbcl-home
-%{?setarch:%patch2 -p1 -b .ADDR_NO_RANDOMIZE}
+%patch2 -p1 -b .personality
%patch3 -p1 -b .optflags
%patch4 -p1 -b .LIB_DIR
@@ -125,8 +123,6 @@
%check || :
pushd tests
-# still need setarch if using ADDR_NO_RANDOMIZE-proc patch, since /proc isn't available on buildsystem/mock.
-#{?setarch} sh ./run-tests.sh
sh ./run-tests.sh
popd
@@ -138,7 +134,6 @@
unset SBCL_HOME ||:
export INSTALL_ROOT=$RPM_BUILD_ROOT%{_prefix}
export LIB_DIR=$RPM_BUILD_ROOT%{_libdir}
-# (may) still need setarch if using ADDR_NO_RANDOMIZE-proc patch
sh ./install.sh
## Unpackaged files
@@ -177,6 +172,9 @@
%changelog
+* Mon Sep 19 2005 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.4-17
+- rework personality/reexec patch (execve -> execvp)
+
* Sat Sep 16 2005 Rex Dieter <rexdieter[AT]users.sf.net> 0.9.4-15
- disable ppc (probably related to #166347)
--- sbcl-0.9.4-ADDR_NO_RANDOMIZE-argv0.patch DELETED ---
--- sbcl-0.9.4-ADDR_NO_RANDOMIZE-proc.patch DELETED ---
More information about the fedora-extras-commits
mailing list