|
@@ -2919,8 +2919,12 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags)
|
|
return -ENOEXEC;
|
|
return -ENOEXEC;
|
|
}
|
|
}
|
|
|
|
|
|
- if (!get_modinfo(info, "intree"))
|
|
|
|
|
|
+ if (!get_modinfo(info, "intree")) {
|
|
|
|
+ if (!test_taint(TAINT_OOT_MODULE))
|
|
|
|
+ pr_warn("%s: loading out-of-tree module taints kernel.\n",
|
|
|
|
+ mod->name);
|
|
add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
|
|
add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
|
|
|
|
+ }
|
|
|
|
|
|
if (get_modinfo(info, "staging")) {
|
|
if (get_modinfo(info, "staging")) {
|
|
add_taint_module(mod, TAINT_CRAP, LOCKDEP_STILL_OK);
|
|
add_taint_module(mod, TAINT_CRAP, LOCKDEP_STILL_OK);
|
|
@@ -3089,6 +3093,8 @@ static int move_module(struct module *mod, struct load_info *info)
|
|
|
|
|
|
static int check_module_license_and_versions(struct module *mod)
|
|
static int check_module_license_and_versions(struct module *mod)
|
|
{
|
|
{
|
|
|
|
+ int prev_taint = test_taint(TAINT_PROPRIETARY_MODULE);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* ndiswrapper is under GPL by itself, but loads proprietary modules.
|
|
* ndiswrapper is under GPL by itself, but loads proprietary modules.
|
|
* Don't use add_taint_module(), as it would prevent ndiswrapper from
|
|
* Don't use add_taint_module(), as it would prevent ndiswrapper from
|
|
@@ -3107,6 +3113,9 @@ static int check_module_license_and_versions(struct module *mod)
|
|
add_taint_module(mod, TAINT_PROPRIETARY_MODULE,
|
|
add_taint_module(mod, TAINT_PROPRIETARY_MODULE,
|
|
LOCKDEP_NOW_UNRELIABLE);
|
|
LOCKDEP_NOW_UNRELIABLE);
|
|
|
|
|
|
|
|
+ if (!prev_taint && test_taint(TAINT_PROPRIETARY_MODULE))
|
|
|
|
+ pr_warn("%s: module license taints kernel.\n", mod->name);
|
|
|
|
+
|
|
#ifdef CONFIG_MODVERSIONS
|
|
#ifdef CONFIG_MODVERSIONS
|
|
if ((mod->num_syms && !mod->crcs)
|
|
if ((mod->num_syms && !mod->crcs)
|
|
|| (mod->num_gpl_syms && !mod->gpl_crcs)
|
|
|| (mod->num_gpl_syms && !mod->gpl_crcs)
|