aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/module.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2008-09-24 17:46:44 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2008-10-10 18:31:05 -0400
commit061b1bd394ca8628b7c24eb4658ba3535da4249a (patch)
tree5711de7ffa17f0f5d0084292707872d19e9b19ff /kernel/module.c
parentb922df7383749a1c0b7ea64c50fa839263d3816b (diff)
Staging: add TAINT_CRAP for all drivers/staging code
We need to add a flag for all code that is in the drivers/staging/ directory to prevent all other kernel developers from worrying about issues here, and to notify users that the drivers might not be as good as they are normally used to. Based on code from Andreas Gruenbacher and Jeff Mahoney to provide a TAINT flag for the support level of a kernel module in the Novell enterprise kernel release. This is the kernel portion of this feature, the ability for the flag to be set needs to be done in the build process and will happen in a follow-up patch. Cc: Andreas Gruenbacher <agruen@suse.de> Cc: Jeff Mahoney <jeffm@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'kernel/module.c')
-rw-r--r--kernel/module.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/module.c b/kernel/module.c
index 9db11911e04b..152b1655bbac 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1806,6 +1806,7 @@ static noinline struct module *load_module(void __user *umod,
1806 Elf_Ehdr *hdr; 1806 Elf_Ehdr *hdr;
1807 Elf_Shdr *sechdrs; 1807 Elf_Shdr *sechdrs;
1808 char *secstrings, *args, *modmagic, *strtab = NULL; 1808 char *secstrings, *args, *modmagic, *strtab = NULL;
1809 char *staging;
1809 unsigned int i; 1810 unsigned int i;
1810 unsigned int symindex = 0; 1811 unsigned int symindex = 0;
1811 unsigned int strindex = 0; 1812 unsigned int strindex = 0;
@@ -1960,6 +1961,14 @@ static noinline struct module *load_module(void __user *umod,
1960 goto free_hdr; 1961 goto free_hdr;
1961 } 1962 }
1962 1963
1964 staging = get_modinfo(sechdrs, infoindex, "staging");
1965 if (staging) {
1966 add_taint_module(mod, TAINT_CRAP);
1967 printk(KERN_WARNING "%s: module is from the staging directory,"
1968 " the quality is unknown, you have been warned.\n",
1969 mod->name);
1970 }
1971
1963 /* Now copy in args */ 1972 /* Now copy in args */
1964 args = strndup_user(uargs, ~0UL >> 1); 1973 args = strndup_user(uargs, ~0UL >> 1);
1965 if (IS_ERR(args)) { 1974 if (IS_ERR(args)) {
@@ -2556,6 +2565,8 @@ static char *module_flags(struct module *mod, char *buf)
2556 buf[bx++] = 'P'; 2565 buf[bx++] = 'P';
2557 if (mod->taints & TAINT_FORCED_MODULE) 2566 if (mod->taints & TAINT_FORCED_MODULE)
2558 buf[bx++] = 'F'; 2567 buf[bx++] = 'F';
2568 if (mod->taints & TAINT_CRAP)
2569 buf[bx++] = 'C';
2559 /* 2570 /*
2560 * TAINT_FORCED_RMMOD: could be added. 2571 * TAINT_FORCED_RMMOD: could be added.
2561 * TAINT_UNSAFE_SMP, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't 2572 * TAINT_UNSAFE_SMP, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't