summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-09-17 19:04:25 -0400
committerNick Mathewson <nickm@torproject.org>2019-09-17 19:04:25 -0400
commitc6f7943269c36be41d7c22ebb38eccc37357022b (patch)
treeba187a20923f1fd56f91f8e3829c61186ba5d776
parent50f981719f1bc7066496bcc4ef78fcdbb1ff1806 (diff)
parent52342327c7e566a25bf69dc6df651de45959e6d6 (diff)
downloadtor-c6f7943269c36be41d7c22ebb38eccc37357022b.tar.gz
tor-c6f7943269c36be41d7c22ebb38eccc37357022b.zip
Merge branch 'bug31570_041' into maint-0.4.1
-rw-r--r--changes/bug315705
-rw-r--r--src/lib/malloc/map_anon.c12
2 files changed, 16 insertions, 1 deletions
diff --git a/changes/bug31570 b/changes/bug31570
new file mode 100644
index 0000000000..f70b577b4c
--- /dev/null
+++ b/changes/bug31570
@@ -0,0 +1,5 @@
+ o Major bugfixes (crash, android):
+ - Tolerate systems (including some Android installations) where madvise
+ and MADV_DONTDUMP are available at build-time, but not at run time.
+ Previously, these systems would notice a failed syscall and abort.
+ Fixes bug 31570; bugfix on 0.4.1.1-alpha.
diff --git a/src/lib/malloc/map_anon.c b/src/lib/malloc/map_anon.c
index 08b754540e..ae4edff769 100644
--- a/src/lib/malloc/map_anon.c
+++ b/src/lib/malloc/map_anon.c
@@ -111,7 +111,17 @@ static int
nodump_mem(void *mem, size_t sz)
{
#if defined(MADV_DONTDUMP)
- return madvise(mem, sz, MADV_DONTDUMP);
+ int rv = madvise(mem, sz, MADV_DONTDUMP);
+ if (rv == 0) {
+ return 0;
+ } else if (errno == ENOSYS || errno == EINVAL) {
+ return 0; // syscall not supported, or flag not supported.
+ } else {
+ tor_log_err_sigsafe("Unexpected error from madvise: ",
+ strerror(errno),
+ NULL);
+ return -1;
+ }
#else
(void) mem;
(void) sz;