Merge tag 'modules-for-v5.10' of git://git.kernel.org/pub/scm/linux/kernel/git/jeyu...
[linux-2.6-microblaze.git] / kernel / module.c
index 9d9f240..a4fa44a 100644 (file)
@@ -92,8 +92,9 @@ EXPORT_SYMBOL_GPL(module_mutex);
 static LIST_HEAD(modules);
 
 /* Work queue for freeing init sections in success case */
-static struct work_struct init_free_wq;
-static struct llist_head init_free_list;
+static void do_free_init(struct work_struct *w);
+static DECLARE_WORK(init_free_wq, do_free_init);
+static LLIST_HEAD(init_free_list);
 
 #ifdef CONFIG_MODULES_TREE_LOOKUP
 
@@ -2097,8 +2098,11 @@ static int module_enforce_rwx_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
        int i;
 
        for (i = 0; i < hdr->e_shnum; i++) {
-               if ((sechdrs[i].sh_flags & shf_wx) == shf_wx)
+               if ((sechdrs[i].sh_flags & shf_wx) == shf_wx) {
+                       pr_err("%s: section %s (index %d) has invalid WRITE|EXEC flags\n",
+                               mod->name, secstrings + sechdrs[i].sh_name, i);
                        return -ENOEXEC;
+               }
        }
 
        return 0;
@@ -3591,14 +3595,6 @@ static void do_free_init(struct work_struct *w)
        }
 }
 
-static int __init modules_wq_init(void)
-{
-       INIT_WORK(&init_free_wq, do_free_init);
-       init_llist_head(&init_free_list);
-       return 0;
-}
-module_init(modules_wq_init);
-
 /*
  * This is where the real work happens.
  *
@@ -3841,8 +3837,10 @@ static int load_module(struct load_info *info, const char __user *uargs,
        char *after_dashes;
 
        err = elf_header_check(info);
-       if (err)
+       if (err) {
+               pr_err("Module has invalid ELF header\n");
                goto free_copy;
+       }
 
        err = setup_load_info(info, flags);
        if (err)
@@ -3850,6 +3848,7 @@ static int load_module(struct load_info *info, const char __user *uargs,
 
        if (blacklisted(info->name)) {
                err = -EPERM;
+               pr_err("Module %s is blacklisted\n", info->name);
                goto free_copy;
        }