mirror of
https://github.com/Ysurac/openmptcprouter.git
synced 2025-03-09 15:40:20 +00:00
Fix RPI kernel compile
This commit is contained in:
parent
e8f9b01b2d
commit
e4f3240c3f
1 changed files with 0 additions and 84 deletions
|
@ -1,84 +0,0 @@
|
|||
From 786b6ff17f8612ba9af84ac379d4b494f39f55c5 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Rostedt <rostedt@goodmis.org>
|
||||
Date: Wed, 23 Aug 2017 13:58:36 -0400
|
||||
Subject: [PATCH 374/374] Arm: mm: ftrace: Only set text back to ro after
|
||||
kernel has been marked ro
|
||||
|
||||
ftrace needs to modify the kernel text in order to enable function tracing.
|
||||
For security reasons, the kernel text is marked to read-only (ro) at the end
|
||||
of system bootup. When enabling function tracing after that, ftrace calls
|
||||
arch specific code that needs to enable the modification of kernel text
|
||||
while ftrace does the update, and reset it back again when finished.
|
||||
|
||||
The issue arises when function tracing is enabled during system bootup. The
|
||||
text hasn't been marked as read-only yet, but the same code to modify the
|
||||
kernel is executed, and when it is finished, it will cause the kernel to
|
||||
become read-only. This causes issues for other init code that requires
|
||||
modification of kernel text during system bootup. This appears to cause
|
||||
issue with Raspberry Pi 2.
|
||||
|
||||
By implementing the feature that is used in x86 to deal with this issue, it
|
||||
fixes the problem. The solution is simple. Have a variable
|
||||
(kernel_set_to_readonly) get set when the system finished boot and marks the
|
||||
kernel to readonly. If that variable is not set, both
|
||||
kernel_set_to_readonly() and kernel_set_to_rw() return without doing any
|
||||
modifications. Those functions are used by ftrace to change the permissions
|
||||
of the kernel text. By not doing anything, ftrace will not mess with the
|
||||
permissions when it is enabled at system bootup.
|
||||
|
||||
Link: http://lkml.kernel.org/r/20170821153402.7so2u364htvt6tnf@camel2.lan
|
||||
Link: https://github.com/raspberrypi/linux/issues/2166#issuecomment-323355145
|
||||
Reported-by: Matthias Reichl <hias@horus.com>
|
||||
Cc: Russell King <linux@armlinux.org.uk>
|
||||
Cc: Kees Cook <keescook@chromium.org>
|
||||
Cc: Eric Anholt <eric@anholt.net>
|
||||
Cc: Stefan Wahren <stefan.wahren@i2se.com>
|
||||
Cc: Phil Elwell <phil@raspberrypi.org>
|
||||
Cc: linux-rpi-kernel@lists.infradead.org
|
||||
Cc: linux-arm-kernel@lists.infradead.org
|
||||
Cc: stable@vger.kernel.org
|
||||
Fixes: 80d6b0c2ee ("ARM: mm: allow text and rodata sections to be read-only")
|
||||
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
||||
Tested-by: Matthias Reichl <hias@horus.com>
|
||||
Acked-by: Kees Cook <keescook@chromium.org>
|
||||
---
|
||||
arch/arm/mm/init.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
|
||||
index 0f6d1537f330..82175c047222 100644
|
||||
--- a/arch/arm/mm/init.c
|
||||
+++ b/arch/arm/mm/init.c
|
||||
@@ -745,19 +745,29 @@ static int __mark_rodata_ro(void *unused)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int kernel_set_to_readonly;
|
||||
+
|
||||
void mark_rodata_ro(void)
|
||||
{
|
||||
+ kernel_set_to_readonly = 1;
|
||||
+
|
||||
stop_machine(__mark_rodata_ro, NULL, NULL);
|
||||
}
|
||||
|
||||
void set_kernel_text_rw(void)
|
||||
{
|
||||
+ if (!kernel_set_to_readonly)
|
||||
+ return;
|
||||
+
|
||||
set_section_perms(ro_perms, ARRAY_SIZE(ro_perms), false,
|
||||
current->active_mm);
|
||||
}
|
||||
|
||||
void set_kernel_text_ro(void)
|
||||
{
|
||||
+ if (!kernel_set_to_readonly)
|
||||
+ return;
|
||||
+
|
||||
set_section_perms(ro_perms, ARRAY_SIZE(ro_perms), true,
|
||||
current->active_mm);
|
||||
}
|
||||
--
|
||||
2.16.1
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue