|
@@ -81,7 +81,8 @@ int unregister_module_notifier(struct notifier_block * nb)
|
|
|
}
|
|
|
EXPORT_SYMBOL(unregister_module_notifier);
|
|
|
|
|
|
-/* We require a truly strong try_module_get() */
|
|
|
+/* We require a truly strong try_module_get(): 0 means failure due to
|
|
|
+ ongoing or failed initialization etc. */
|
|
|
static inline int strong_try_module_get(struct module *mod)
|
|
|
{
|
|
|
if (mod && mod->state == MODULE_STATE_COMING)
|
|
@@ -952,7 +953,8 @@ static unsigned long resolve_symbol(Elf_Shdr *sechdrs,
|
|
|
ret = __find_symbol(name, &owner, &crc,
|
|
|
!(mod->taints & TAINT_PROPRIETARY_MODULE));
|
|
|
if (ret) {
|
|
|
- /* use_module can fail due to OOM, or module unloading */
|
|
|
+ /* use_module can fail due to OOM,
|
|
|
+ or module initialization or unloading */
|
|
|
if (!check_version(sechdrs, versindex, name, mod, crc) ||
|
|
|
!use_module(mod, owner))
|
|
|
ret = 0;
|
|
@@ -1369,7 +1371,7 @@ dup:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-/* Change all symbols so that sh_value encodes the pointer directly. */
|
|
|
+/* Change all symbols so that st_value encodes the pointer directly. */
|
|
|
static int simplify_symbols(Elf_Shdr *sechdrs,
|
|
|
unsigned int symindex,
|
|
|
const char *strtab,
|