summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMyungJoo Ham <myungjoo.ham@samsung.com>2016-03-28 04:35:49 +0000
committerDave Watson <davejwatson@fb.com>2017-08-15 10:33:48 -0700
commit74d7cd9898ab68c33e0ee511304c77bb910a02cd (patch)
treebc9a9d66f6157c7278978bd990b2aeae3bcc7083
parent3b3a453a65867f39b4a2850d21955610f0fab649 (diff)
downloadlibunwind-74d7cd9898ab68c33e0ee511304c77bb910a02cd.tar.gz
arm: Expand memory validation
Prevent SIGSEGV for write as well as read. Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
-rw-r--r--src/arm/Ginit.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/arm/Ginit.c b/src/arm/Ginit.c
index 1ed3dbfc..a23124d7 100644
--- a/src/arm/Ginit.c
+++ b/src/arm/Ginit.c
@@ -126,6 +126,11 @@ static int
access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write,
void *arg)
{
+ /* validate address */
+ const struct cursor *c = (const struct cursor *) arg;
+ if (c && validate_mem(addr))
+ return -1;
+
if (write)
{
Debug (16, "mem[%x] <- %x\n", addr, *val);
@@ -133,11 +138,6 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write,
}
else
{
- /* validate address */
- const struct cursor *c = (const struct cursor *) arg;
- if (c && validate_mem(addr))
- return -1;
-
*val = *(unw_word_t *) addr;
Debug (16, "mem[%x] -> %x\n", addr, *val);
}