|
@@ -1253,12 +1253,9 @@ void test_ptrace_of_child(int *ptr, u16 pkey)
|
|
|
free(plain_ptr_unaligned);
|
|
|
}
|
|
|
|
|
|
-void test_executing_on_unreadable_memory(int *ptr, u16 pkey)
|
|
|
+void *get_pointer_to_instructions(void)
|
|
|
{
|
|
|
void *p1;
|
|
|
- int scratch;
|
|
|
- int ptr_contents;
|
|
|
- int ret;
|
|
|
|
|
|
p1 = ALIGN_PTR_UP(&lots_o_noops_around_write, PAGE_SIZE);
|
|
|
dprintf3("&lots_o_noops: %p\n", &lots_o_noops_around_write);
|
|
@@ -1268,7 +1265,23 @@ void test_executing_on_unreadable_memory(int *ptr, u16 pkey)
|
|
|
/* Point 'p1' at the *second* page of the function: */
|
|
|
p1 += PAGE_SIZE;
|
|
|
|
|
|
+ /*
|
|
|
+ * Try to ensure we fault this in on next touch to ensure
|
|
|
+ * we get an instruction fault as opposed to a data one
|
|
|
+ */
|
|
|
madvise(p1, PAGE_SIZE, MADV_DONTNEED);
|
|
|
+
|
|
|
+ return p1;
|
|
|
+}
|
|
|
+
|
|
|
+void test_executing_on_unreadable_memory(int *ptr, u16 pkey)
|
|
|
+{
|
|
|
+ void *p1;
|
|
|
+ int scratch;
|
|
|
+ int ptr_contents;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ p1 = get_pointer_to_instructions();
|
|
|
lots_o_noops_around_write(&scratch);
|
|
|
ptr_contents = read_ptr(p1);
|
|
|
dprintf2("ptr (%p) contents@%d: %x\n", p1, __LINE__, ptr_contents);
|