Merge branch 'next-general' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
[linux-2.6-microblaze.git] / security / security.c
index e74f46f..04d173e 100644 (file)
@@ -12,6 +12,8 @@
  *     (at your option) any later version.
  */
 
+#define pr_fmt(fmt) "LSM: " fmt
+
 #include <linux/bpf.h>
 #include <linux/capability.h>
 #include <linux/dcache.h>
@@ -43,12 +45,22 @@ char *lsm_names;
 static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1] =
        CONFIG_DEFAULT_SECURITY;
 
+static __initdata bool debug;
+#define init_debug(...)                                                \
+       do {                                                    \
+               if (debug)                                      \
+                       pr_info(__VA_ARGS__);                   \
+       } while (0)
+
 static void __init major_lsm_init(void)
 {
        struct lsm_info *lsm;
+       int ret;
 
        for (lsm = __start_lsm_info; lsm < __end_lsm_info; lsm++) {
-               lsm->init();
+               init_debug("initializing %s\n", lsm->name);
+               ret = lsm->init();
+               WARN(ret, "%s failed to initialize: %d\n", lsm->name, ret);
        }
 }
 
@@ -91,6 +103,14 @@ static int __init choose_lsm(char *str)
 }
 __setup("security=", choose_lsm);
 
+/* Enable LSM order debugging. */
+static int __init enable_debug(char *str)
+{
+       debug = true;
+       return 1;
+}
+__setup("lsm.debug", enable_debug);
+
 static bool match_last_lsm(const char *list, const char *lsm)
 {
        const char *last;
@@ -1138,7 +1158,7 @@ int security_task_movememory(struct task_struct *p)
        return call_int_hook(task_movememory, 0, p);
 }
 
-int security_task_kill(struct task_struct *p, struct siginfo *info,
+int security_task_kill(struct task_struct *p, struct kernel_siginfo *info,
                        int sig, const struct cred *cred)
 {
        return call_int_hook(task_kill, 0, p, info, sig, cred);