module,bug: Add TAINT_OOT_MODULE flag for modules not built in-tree
[pandora-kernel.git] / kernel / module.c
index 04379f9..ef8cb70 100644 (file)
@@ -2487,6 +2487,9 @@ static int check_modinfo(struct module *mod, struct load_info *info)
                return -ENOEXEC;
        }
 
+       if (!get_modinfo(info, "intree"))
+               add_taint_module(mod, TAINT_OOT_MODULE);
+
        if (get_modinfo(info, "staging")) {
                add_taint_module(mod, TAINT_CRAP);
                printk(KERN_WARNING "%s: module is from the staging directory,"
@@ -2878,8 +2881,7 @@ static struct module *load_module(void __user *umod,
        }
 
        /* This has to be done once we're sure module name is unique. */
-       if (!mod->taints || mod->taints == (1U<<TAINT_CRAP))
-               dynamic_debug_setup(info.debug, info.num_debug);
+       dynamic_debug_setup(info.debug, info.num_debug);
 
        /* Find duplicate symbols */
        err = verify_export_symbols(mod);
@@ -2915,8 +2917,7 @@ static struct module *load_module(void __user *umod,
        module_bug_cleanup(mod);
 
  ddebug:
-       if (!mod->taints || mod->taints == (1U<<TAINT_CRAP))
-               dynamic_debug_remove(info.debug);
+       dynamic_debug_remove(info.debug);
  unlock:
        mutex_unlock(&module_mutex);
        synchronize_sched();
@@ -3257,6 +3258,8 @@ static char *module_flags(struct module *mod, char *buf)
                buf[bx++] = '(';
                if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE))
                        buf[bx++] = 'P';
+               else if (mod->taints & (1 << TAINT_OOT_MODULE))
+                       buf[bx++] = 'O';
                if (mod->taints & (1 << TAINT_FORCED_MODULE))
                        buf[bx++] = 'F';
                if (mod->taints & (1 << TAINT_CRAP))
@@ -3487,50 +3490,3 @@ void module_layout(struct module *mod,
 }
 EXPORT_SYMBOL(module_layout);
 #endif
-
-#ifdef CONFIG_TRACEPOINTS
-void module_update_tracepoints(void)
-{
-       struct module *mod;
-
-       mutex_lock(&module_mutex);
-       list_for_each_entry(mod, &modules, list)
-               if (!mod->taints)
-                       tracepoint_update_probe_range(mod->tracepoints_ptrs,
-                               mod->tracepoints_ptrs + mod->num_tracepoints);
-       mutex_unlock(&module_mutex);
-}
-
-/*
- * Returns 0 if current not found.
- * Returns 1 if current found.
- */
-int module_get_iter_tracepoints(struct tracepoint_iter *iter)
-{
-       struct module *iter_mod;
-       int found = 0;
-
-       mutex_lock(&module_mutex);
-       list_for_each_entry(iter_mod, &modules, list) {
-               if (!iter_mod->taints) {
-                       /*
-                        * Sorted module list
-                        */
-                       if (iter_mod < iter->module)
-                               continue;
-                       else if (iter_mod > iter->module)
-                               iter->tracepoint = NULL;
-                       found = tracepoint_get_iter_range(&iter->tracepoint,
-                               iter_mod->tracepoints_ptrs,
-                               iter_mod->tracepoints_ptrs
-                                       + iter_mod->num_tracepoints);
-                       if (found) {
-                               iter->module = iter_mod;
-                               break;
-                       }
-               }
-       }
-       mutex_unlock(&module_mutex);
-       return found;
-}
-#endif