From b5556e91c3d94c9857a4d08aaa74d3d1d0fdd7b4 Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Sat, 30 Jan 2021 00:07:13 -0500 Subject: [PATCH] Attempt To Fix RPI Bug --- libreborn/src/libreborn.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libreborn/src/libreborn.c b/libreborn/src/libreborn.c index 5a7cd65..82e196b 100644 --- a/libreborn/src/libreborn.c +++ b/libreborn/src/libreborn.c @@ -186,7 +186,8 @@ void _patch(const char *file, int line, void *start, unsigned char patch[]) { size_t page_size = sysconf(_SC_PAGESIZE); uintptr_t end = ((uintptr_t) start) + 4; uintptr_t page_start = ((uintptr_t) start) & -page_size; - mprotect((void *) page_start, end - page_start, PROT_READ | PROT_WRITE); + // Allow Writing To Code Memory + mprotect((void *) page_start, end - page_start, PROT_READ | PROT_WRITE | PROT_EXEC); // PROT_EXEC Is Needed Because Other Code In The Page May Be Being Executed unsigned char *data = (unsigned char *) start; @@ -196,6 +197,7 @@ void _patch(const char *file, int line, void *start, unsigned char patch[]) { PATCH_PRINTF(file, line, start, "result"); + // Reset Code Memory Permissions mprotect((void *) page_start, end - page_start, PROT_READ | PROT_EXEC); // Clear ARM Instruction Cache