History

module: Clean up ro/nx after early module load failures

The commit 4982223e51e8 module: set nx before marking module MODULE_STATE_COMING. introduced a regression: if a module fails to parse its arguments or if mod_sysfs_setup fails, then the module's memory will be freed while still read-only. Anything that reuses that memory will crash as soon as it tries to write to it.

Andy Lutomirski committed 12 years ago

Commit ff7e0051 parent c9d26421 file · +5 −0Browse files

Showing the changes to kernel/module.c (1 of 1 file). Show all

Unified · Split

kernel/module.c+5−0
@@ -3304,6 +3304,11 @@ static int load_module(struct load_info *info, const char __user *uargs, · 3303 unmodified lines
33043304 mutex_lock(&module_mutex);
33053305 module_bug_cleanup(mod);
33063306 mutex_unlock(&module_mutex);
3307+
3308+ /* we can't deallocate the module until we clear memory protection */
3309+ unset_module_init_ro_nx(mod);
3310+ unset_module_core_ro_nx(mod);
3311+
33073312 ddebug_cleanup:
33083313 dynamic_debug_remove(info->debug);
33093314 synchronize_sched();