|
@@ -766,6 +766,13 @@ EXPORT_SYMBOL_GPL(rodata_test_data);
|
|
|
void mark_rodata_ro(void)
|
|
|
{
|
|
|
unsigned long start = PFN_ALIGN(_stext), end = PFN_ALIGN(__end_rodata);
|
|
|
+ unsigned long rodata_start =
|
|
|
+ ((unsigned long)__start_rodata + PAGE_SIZE - 1) & PAGE_MASK;
|
|
|
+
|
|
|
+#ifdef CONFIG_DYNAMIC_FTRACE
|
|
|
+ /* Dynamic tracing modifies the kernel text section */
|
|
|
+ start = rodata_start;
|
|
|
+#endif
|
|
|
|
|
|
printk(KERN_INFO "Write protecting the kernel read-only data: %luk\n",
|
|
|
(end - start) >> 10);
|
|
@@ -775,8 +782,7 @@ void mark_rodata_ro(void)
|
|
|
* The rodata section (but not the kernel text!) should also be
|
|
|
* not-executable.
|
|
|
*/
|
|
|
- start = ((unsigned long)__start_rodata + PAGE_SIZE - 1) & PAGE_MASK;
|
|
|
- set_memory_nx(start, (end - start) >> PAGE_SHIFT);
|
|
|
+ set_memory_nx(rodata_start, (end - start) >> PAGE_SHIFT);
|
|
|
|
|
|
rodata_test();
|
|
|
|