lkml.org 
[lkml]   [2008]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 01/04] 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>

    ---

    Documentation/sysctl/kernel.txt | 1 +
    include/linux/kernel.h | 1 +
    kernel/module.c | 9 +++++++++
    kernel/panic.c | 6 ++++--
    4 files changed, 15 insertions(+), 2 deletions(-)

    --- a/Documentation/sysctl/kernel.txt
    +++ b/Documentation/sysctl/kernel.txt
    @@ -368,4 +368,5 @@ can be ORed together:
    2 - A module was force loaded by insmod -f.
    Set by modutils >= 2.4.9 and module-init-tools.
    4 - Unsafe SMP processors: SMP with CPUs not designed for SMP.
    + 64 - A module from drivers/staging was loaded.

    --- a/include/linux/kernel.h
    +++ b/include/linux/kernel.h
    @@ -261,6 +261,7 @@ extern enum system_states {
    #define TAINT_DIE (1<<7)
    #define TAINT_OVERRIDDEN_ACPI_TABLE (1<<8)
    #define TAINT_WARN (1<<9)
    +#define TAINT_CRAP (1<<10)

    extern void dump_stack(void) __cold;

    --- a/kernel/module.c
    +++ b/kernel/module.c
    @@ -1834,6 +1834,7 @@ static noinline struct module *load_modu
    Elf_Ehdr *hdr;
    Elf_Shdr *sechdrs;
    char *secstrings, *args, *modmagic, *strtab = NULL;
    + char *staging;
    unsigned int i;
    unsigned int symindex = 0;
    unsigned int strindex = 0;
    @@ -1989,6 +1990,14 @@ static noinline struct module *load_modu
    goto free_hdr;
    }

    + staging = get_modinfo(sechdrs, infoindex, "staging");
    + if (staging) {
    + add_taint_module(mod, TAINT_CRAP);
    + printk(KERN_WARNING "%s: module is from the staging directory,"
    + " the quality is unknown, you have been warned.\n",
    + mod->name);
    + }
    +
    /* Now copy in args */
    args = strndup_user(uargs, ~0UL >> 1);
    if (IS_ERR(args)) {
    --- a/kernel/panic.c
    +++ b/kernel/panic.c
    @@ -155,6 +155,7 @@ EXPORT_SYMBOL(panic);
    * 'U' - Userspace-defined naughtiness.
    * 'A' - ACPI table overridden.
    * 'W' - Taint on warning.
    + * 'C' - modules from drivers/staging are loaded.
    *
    * The string is overwritten by the next call to print_taint().
    */
    @@ -163,7 +164,7 @@ const char *print_tainted(void)
    {
    static char buf[20];
    if (tainted) {
    - snprintf(buf, sizeof(buf), "Tainted: %c%c%c%c%c%c%c%c%c%c",
    + snprintf(buf, sizeof(buf), "Tainted: %c%c%c%c%c%c%c%c%c%c%c",
    tainted & TAINT_PROPRIETARY_MODULE ? 'P' : 'G',
    tainted & TAINT_FORCED_MODULE ? 'F' : ' ',
    tainted & TAINT_UNSAFE_SMP ? 'S' : ' ',
    @@ -173,7 +174,8 @@ const char *print_tainted(void)
    tainted & TAINT_USER ? 'U' : ' ',
    tainted & TAINT_DIE ? 'D' : ' ',
    tainted & TAINT_OVERRIDDEN_ACPI_TABLE ? 'A' : ' ',
    - tainted & TAINT_WARN ? 'W' : ' ');
    + tainted & TAINT_WARN ? 'W' : ' ',
    + tainted & TAINT_CRAP ? 'C' : ' ');
    }
    else
    snprintf(buf, sizeof(buf), "Not tainted");
    --


    \
     
     \ /
      Last update: 2008-09-25 01:07    [W:0.026 / U:3.484 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site