|
@@ -1902,6 +1902,9 @@ static void frob_writable_data(const struct module_layout *layout,
|
|
/* livepatching wants to disable read-only so it can frob module. */
|
|
/* livepatching wants to disable read-only so it can frob module. */
|
|
void module_disable_ro(const struct module *mod)
|
|
void module_disable_ro(const struct module *mod)
|
|
{
|
|
{
|
|
|
|
+ if (!rodata_enabled)
|
|
|
|
+ return;
|
|
|
|
+
|
|
frob_text(&mod->core_layout, set_memory_rw);
|
|
frob_text(&mod->core_layout, set_memory_rw);
|
|
frob_rodata(&mod->core_layout, set_memory_rw);
|
|
frob_rodata(&mod->core_layout, set_memory_rw);
|
|
frob_ro_after_init(&mod->core_layout, set_memory_rw);
|
|
frob_ro_after_init(&mod->core_layout, set_memory_rw);
|
|
@@ -1911,6 +1914,9 @@ void module_disable_ro(const struct module *mod)
|
|
|
|
|
|
void module_enable_ro(const struct module *mod, bool after_init)
|
|
void module_enable_ro(const struct module *mod, bool after_init)
|
|
{
|
|
{
|
|
|
|
+ if (!rodata_enabled)
|
|
|
|
+ return;
|
|
|
|
+
|
|
frob_text(&mod->core_layout, set_memory_ro);
|
|
frob_text(&mod->core_layout, set_memory_ro);
|
|
frob_rodata(&mod->core_layout, set_memory_ro);
|
|
frob_rodata(&mod->core_layout, set_memory_ro);
|
|
frob_text(&mod->init_layout, set_memory_ro);
|
|
frob_text(&mod->init_layout, set_memory_ro);
|
|
@@ -1943,6 +1949,9 @@ void set_all_modules_text_rw(void)
|
|
{
|
|
{
|
|
struct module *mod;
|
|
struct module *mod;
|
|
|
|
|
|
|
|
+ if (!rodata_enabled)
|
|
|
|
+ return;
|
|
|
|
+
|
|
mutex_lock(&module_mutex);
|
|
mutex_lock(&module_mutex);
|
|
list_for_each_entry_rcu(mod, &modules, list) {
|
|
list_for_each_entry_rcu(mod, &modules, list) {
|
|
if (mod->state == MODULE_STATE_UNFORMED)
|
|
if (mod->state == MODULE_STATE_UNFORMED)
|
|
@@ -1959,6 +1968,9 @@ void set_all_modules_text_ro(void)
|
|
{
|
|
{
|
|
struct module *mod;
|
|
struct module *mod;
|
|
|
|
|
|
|
|
+ if (!rodata_enabled)
|
|
|
|
+ return;
|
|
|
|
+
|
|
mutex_lock(&module_mutex);
|
|
mutex_lock(&module_mutex);
|
|
list_for_each_entry_rcu(mod, &modules, list) {
|
|
list_for_each_entry_rcu(mod, &modules, list) {
|
|
/*
|
|
/*
|
|
@@ -1978,10 +1990,12 @@ void set_all_modules_text_ro(void)
|
|
|
|
|
|
static void disable_ro_nx(const struct module_layout *layout)
|
|
static void disable_ro_nx(const struct module_layout *layout)
|
|
{
|
|
{
|
|
- frob_text(layout, set_memory_rw);
|
|
|
|
- frob_rodata(layout, set_memory_rw);
|
|
|
|
|
|
+ if (rodata_enabled) {
|
|
|
|
+ frob_text(layout, set_memory_rw);
|
|
|
|
+ frob_rodata(layout, set_memory_rw);
|
|
|
|
+ frob_ro_after_init(layout, set_memory_rw);
|
|
|
|
+ }
|
|
frob_rodata(layout, set_memory_x);
|
|
frob_rodata(layout, set_memory_x);
|
|
- frob_ro_after_init(layout, set_memory_rw);
|
|
|
|
frob_ro_after_init(layout, set_memory_x);
|
|
frob_ro_after_init(layout, set_memory_x);
|
|
frob_writable_data(layout, set_memory_x);
|
|
frob_writable_data(layout, set_memory_x);
|
|
}
|
|
}
|