From aa69372cf806f77c8dd9947eda4662305bb6b12f Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 14 Apr 2013 14:47:14 +0000 Subject: merge revision(s) 40216: [Backport #8266] * ext/fiddle/closure.c (initialize): check mprotect's return value. If mprotect is failed because of PaX or something, its function call will cause SEGV. http://c5664.rubyci.org/~chkbuild/ruby-trunk/log/20130401T210301Z.diff.html.gz git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@40290 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ ext/fiddle/closure.c | 5 ++++- version.h | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1ae694b1d1..28185b7ae4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sun Apr 14 23:43:06 2013 NARUSE, Yui + + * ext/fiddle/closure.c (initialize): check mprotect's return value. + If mprotect is failed because of PaX or something, its function call + will cause SEGV. + http://c5664.rubyci.org/~chkbuild/ruby-trunk/log/20130401T210301Z.diff.html.gz + Sun Apr 14 23:19:55 2013 Nobuyoshi Nakada * lib/mkmf.rb (MAIN_DOES_NOTHING): ensure symbols for tests to be diff --git a/ext/fiddle/closure.c b/ext/fiddle/closure.c index fdb2233b22..d064f11991 100644 --- a/ext/fiddle/closure.c +++ b/ext/fiddle/closure.c @@ -228,7 +228,10 @@ initialize(int rbargc, VALUE argv[], VALUE self) #else result = ffi_prep_closure(pcl, cif, callback, (void *)self); cl->code = (void *)pcl; - mprotect(pcl, sizeof(pcl), PROT_READ | PROT_EXEC); + i = mprotect(pcl, sizeof(pcl), PROT_READ | PROT_EXEC); + if (i) { + rb_sys_fail("mprotect"); + } #endif if (FFI_OK != result) diff --git a/version.h b/version.h index 40209b391a..97f5cce9a7 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.0.0" #define RUBY_RELEASE_DATE "2013-04-14" -#define RUBY_PATCHLEVEL 125 +#define RUBY_PATCHLEVEL 126 #define RUBY_RELEASE_YEAR 2013 #define RUBY_RELEASE_MONTH 4 -- cgit v1.2.3