Merge tag 'mm-stable-2024-03-13-20-04' of git://git.kernel.org/pub/scm/linux/kernel...
[sfrench/cifs-2.6.git] / kernel / module / main.c
index b0b99348e1a8b333c5933a9e6f5148bbe61894ac..e1e8a7a9d6c193c092b02239446750c3ec4e8f10 100644 (file)
@@ -2576,7 +2576,9 @@ static noinline int do_init_module(struct module *mod)
        /* Switch to core kallsyms now init is done: kallsyms may be walking! */
        rcu_assign_pointer(mod->kallsyms, &mod->core_kallsyms);
 #endif
-       module_enable_ro(mod, true);
+       ret = module_enable_rodata_ro(mod, true);
+       if (ret)
+               goto fail_mutex_unlock;
        mod_tree_remove_init(mod);
        module_arch_freeing_init(mod);
        for_class_mod_mem_type(type, init) {
@@ -2614,6 +2616,8 @@ static noinline int do_init_module(struct module *mod)
 
        return 0;
 
+fail_mutex_unlock:
+       mutex_unlock(&module_mutex);
 fail_free_freeinit:
        kfree(freeinit);
 fail:
@@ -2741,9 +2745,15 @@ static int complete_formation(struct module *mod, struct load_info *info)
        module_bug_finalize(info->hdr, info->sechdrs, mod);
        module_cfi_finalize(info->hdr, info->sechdrs, mod);
 
-       module_enable_ro(mod, false);
-       module_enable_nx(mod);
-       module_enable_x(mod);
+       err = module_enable_rodata_ro(mod, false);
+       if (err)
+               goto out_strict_rwx;
+       err = module_enable_data_nx(mod);
+       if (err)
+               goto out_strict_rwx;
+       err = module_enable_text_rox(mod);
+       if (err)
+               goto out_strict_rwx;
 
        /*
         * Mark state as coming so strong_try_module_get() ignores us,
@@ -2754,6 +2764,8 @@ static int complete_formation(struct module *mod, struct load_info *info)
 
        return 0;
 
+out_strict_rwx:
+       module_bug_cleanup(mod);
 out:
        mutex_unlock(&module_mutex);
        return err;