diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-06 20:28:32 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-06 20:28:32 -0500 |
| commit | d4a2e61f0b7a7b5b9e321e776a1e874c02e847e4 (patch) | |
| tree | d90b71a99cb82809d56f9798f59d175b57562803 /kernel | |
| parent | 0e4c9dc2f2e0fb6d3838eba34382fc6d2d1c381c (diff) | |
| parent | 2449b8ba0745327c5fa49a8d9acffe03b2eded69 (diff) | |
Merge git://github.com/rustyrussell/linux
* git://github.com/rustyrussell/linux:
module,bug: Add TAINT_OOT_MODULE flag for modules not built in-tree
module: Enable dynamic debugging regardless of taint
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/module.c | 11 | ||||
| -rw-r--r-- | kernel/panic.c | 2 |
2 files changed, 9 insertions, 4 deletions
diff --git a/kernel/module.c b/kernel/module.c index 93342d992f34..ef8cb70c6996 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
| @@ -2487,6 +2487,9 @@ static int check_modinfo(struct module *mod, struct load_info *info) | |||
| 2487 | return -ENOEXEC; | 2487 | return -ENOEXEC; |
| 2488 | } | 2488 | } |
| 2489 | 2489 | ||
| 2490 | if (!get_modinfo(info, "intree")) | ||
| 2491 | add_taint_module(mod, TAINT_OOT_MODULE); | ||
| 2492 | |||
| 2490 | if (get_modinfo(info, "staging")) { | 2493 | if (get_modinfo(info, "staging")) { |
| 2491 | add_taint_module(mod, TAINT_CRAP); | 2494 | add_taint_module(mod, TAINT_CRAP); |
| 2492 | printk(KERN_WARNING "%s: module is from the staging directory," | 2495 | printk(KERN_WARNING "%s: module is from the staging directory," |
| @@ -2878,8 +2881,7 @@ static struct module *load_module(void __user *umod, | |||
| 2878 | } | 2881 | } |
| 2879 | 2882 | ||
| 2880 | /* This has to be done once we're sure module name is unique. */ | 2883 | /* This has to be done once we're sure module name is unique. */ |
| 2881 | if (!mod->taints || mod->taints == (1U<<TAINT_CRAP)) | 2884 | dynamic_debug_setup(info.debug, info.num_debug); |
| 2882 | dynamic_debug_setup(info.debug, info.num_debug); | ||
| 2883 | 2885 | ||
| 2884 | /* Find duplicate symbols */ | 2886 | /* Find duplicate symbols */ |
| 2885 | err = verify_export_symbols(mod); | 2887 | err = verify_export_symbols(mod); |
| @@ -2915,8 +2917,7 @@ static struct module *load_module(void __user *umod, | |||
| 2915 | module_bug_cleanup(mod); | 2917 | module_bug_cleanup(mod); |
| 2916 | 2918 | ||
| 2917 | ddebug: | 2919 | ddebug: |
| 2918 | if (!mod->taints || mod->taints == (1U<<TAINT_CRAP)) | 2920 | dynamic_debug_remove(info.debug); |
| 2919 | dynamic_debug_remove(info.debug); | ||
| 2920 | unlock: | 2921 | unlock: |
| 2921 | mutex_unlock(&module_mutex); | 2922 | mutex_unlock(&module_mutex); |
| 2922 | synchronize_sched(); | 2923 | synchronize_sched(); |
| @@ -3257,6 +3258,8 @@ static char *module_flags(struct module *mod, char *buf) | |||
| 3257 | buf[bx++] = '('; | 3258 | buf[bx++] = '('; |
| 3258 | if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE)) | 3259 | if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE)) |
| 3259 | buf[bx++] = 'P'; | 3260 | buf[bx++] = 'P'; |
| 3261 | else if (mod->taints & (1 << TAINT_OOT_MODULE)) | ||
| 3262 | buf[bx++] = 'O'; | ||
| 3260 | if (mod->taints & (1 << TAINT_FORCED_MODULE)) | 3263 | if (mod->taints & (1 << TAINT_FORCED_MODULE)) |
| 3261 | buf[bx++] = 'F'; | 3264 | buf[bx++] = 'F'; |
| 3262 | if (mod->taints & (1 << TAINT_CRAP)) | 3265 | if (mod->taints & (1 << TAINT_CRAP)) |
diff --git a/kernel/panic.c b/kernel/panic.c index d7bb6974efb5..b26593604214 100644 --- a/kernel/panic.c +++ b/kernel/panic.c | |||
| @@ -177,6 +177,7 @@ static const struct tnt tnts[] = { | |||
| 177 | { TAINT_WARN, 'W', ' ' }, | 177 | { TAINT_WARN, 'W', ' ' }, |
| 178 | { TAINT_CRAP, 'C', ' ' }, | 178 | { TAINT_CRAP, 'C', ' ' }, |
| 179 | { TAINT_FIRMWARE_WORKAROUND, 'I', ' ' }, | 179 | { TAINT_FIRMWARE_WORKAROUND, 'I', ' ' }, |
| 180 | { TAINT_OOT_MODULE, 'O', ' ' }, | ||
| 180 | }; | 181 | }; |
| 181 | 182 | ||
| 182 | /** | 183 | /** |
| @@ -194,6 +195,7 @@ static const struct tnt tnts[] = { | |||
| 194 | * 'W' - Taint on warning. | 195 | * 'W' - Taint on warning. |
| 195 | * 'C' - modules from drivers/staging are loaded. | 196 | * 'C' - modules from drivers/staging are loaded. |
| 196 | * 'I' - Working around severe firmware bug. | 197 | * 'I' - Working around severe firmware bug. |
| 198 | * 'O' - Out-of-tree module has been loaded. | ||
| 197 | * | 199 | * |
| 198 | * The string is overwritten by the next call to print_tainted(). | 200 | * The string is overwritten by the next call to print_tainted(). |
| 199 | */ | 201 | */ |
