|
@@ -93,9 +93,6 @@ static int kernel_init(void *);
|
|
|
extern void init_IRQ(void);
|
|
|
extern void fork_init(void);
|
|
|
extern void radix_tree_init(void);
|
|
|
-#ifndef CONFIG_DEBUG_RODATA
|
|
|
-static inline void mark_rodata_ro(void) { }
|
|
|
-#endif
|
|
|
|
|
|
/*
|
|
|
* Debug helper: via this flag we know that we are in 'early bootup code'
|
|
@@ -929,6 +926,28 @@ static int try_to_run_init_process(const char *init_filename)
|
|
|
|
|
|
static noinline void __init kernel_init_freeable(void);
|
|
|
|
|
|
+#ifdef CONFIG_DEBUG_RODATA
|
|
|
+static bool rodata_enabled = true;
|
|
|
+static int __init set_debug_rodata(char *str)
|
|
|
+{
|
|
|
+ return strtobool(str, &rodata_enabled);
|
|
|
+}
|
|
|
+__setup("rodata=", set_debug_rodata);
|
|
|
+
|
|
|
+static void mark_readonly(void)
|
|
|
+{
|
|
|
+ if (rodata_enabled)
|
|
|
+ mark_rodata_ro();
|
|
|
+ else
|
|
|
+ pr_info("Kernel memory protection disabled.\n");
|
|
|
+}
|
|
|
+#else
|
|
|
+static inline void mark_readonly(void)
|
|
|
+{
|
|
|
+ pr_warn("This architecture does not have kernel memory protection.\n");
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
static int __ref kernel_init(void *unused)
|
|
|
{
|
|
|
int ret;
|
|
@@ -937,7 +956,7 @@ static int __ref kernel_init(void *unused)
|
|
|
/* need to finish all async __init code before freeing the memory */
|
|
|
async_synchronize_full();
|
|
|
free_initmem();
|
|
|
- mark_rodata_ro();
|
|
|
+ mark_readonly();
|
|
|
system_state = SYSTEM_RUNNING;
|
|
|
numa_default_policy();
|
|
|
|