|
@@ -700,7 +700,7 @@ int kernel_set_to_readonly;
|
|
|
void set_kernel_text_rw(void)
|
|
|
{
|
|
|
unsigned long start = PFN_ALIGN(_text);
|
|
|
- unsigned long end = PFN_ALIGN(__start_rodata);
|
|
|
+ unsigned long end = PFN_ALIGN(__stop___ex_table);
|
|
|
|
|
|
if (!kernel_set_to_readonly)
|
|
|
return;
|
|
@@ -708,13 +708,18 @@ void set_kernel_text_rw(void)
|
|
|
pr_debug("Set kernel text: %lx - %lx for read write\n",
|
|
|
start, end);
|
|
|
|
|
|
+ /*
|
|
|
+ * Make the kernel identity mapping for text RW. Kernel text
|
|
|
+ * mapping will always be RO. Refer to the comment in
|
|
|
+ * static_protections() in pageattr.c
|
|
|
+ */
|
|
|
set_memory_rw(start, (end - start) >> PAGE_SHIFT);
|
|
|
}
|
|
|
|
|
|
void set_kernel_text_ro(void)
|
|
|
{
|
|
|
unsigned long start = PFN_ALIGN(_text);
|
|
|
- unsigned long end = PFN_ALIGN(__start_rodata);
|
|
|
+ unsigned long end = PFN_ALIGN(__stop___ex_table);
|
|
|
|
|
|
if (!kernel_set_to_readonly)
|
|
|
return;
|
|
@@ -722,6 +727,9 @@ void set_kernel_text_ro(void)
|
|
|
pr_debug("Set kernel text: %lx - %lx for read only\n",
|
|
|
start, end);
|
|
|
|
|
|
+ /*
|
|
|
+ * Set the kernel identity mapping for text RO.
|
|
|
+ */
|
|
|
set_memory_ro(start, (end - start) >> PAGE_SHIFT);
|
|
|
}
|
|
|
|