瀏覽代碼

apparmor: add debug assert AA_BUG and Kconfig to control debug info

Signed-off-by: John Johansen <john.johansen@canonical.com>
John Johansen 9 年之前
父節點
當前提交
680cd62e91
共有 3 個文件被更改,包括 43 次插入4 次删除
  1. 29 2
      security/apparmor/Kconfig
  2. 13 1
      security/apparmor/include/lib.h
  3. 1 1
      security/apparmor/lsm.c

+ 29 - 2
security/apparmor/Kconfig

@@ -36,7 +36,6 @@ config SECURITY_APPARMOR_HASH
 	select CRYPTO
 	select CRYPTO
 	select CRYPTO_SHA1
 	select CRYPTO_SHA1
 	default y
 	default y
-
 	help
 	help
 	  This option selects whether introspection of loaded policy
 	  This option selects whether introspection of loaded policy
 	  is available to userspace via the apparmor filesystem.
 	  is available to userspace via the apparmor filesystem.
@@ -45,7 +44,6 @@ config SECURITY_APPARMOR_HASH_DEFAULT
        bool "Enable policy hash introspection by default"
        bool "Enable policy hash introspection by default"
        depends on SECURITY_APPARMOR_HASH
        depends on SECURITY_APPARMOR_HASH
        default y
        default y
-
        help
        help
          This option selects whether sha1 hashing of loaded policy
          This option selects whether sha1 hashing of loaded policy
 	 is enabled by default. The generation of sha1 hashes for
 	 is enabled by default. The generation of sha1 hashes for
@@ -54,3 +52,32 @@ config SECURITY_APPARMOR_HASH_DEFAULT
 	 however it can slow down policy load on some devices. In
 	 however it can slow down policy load on some devices. In
 	 these cases policy hashing can be disabled by default and
 	 these cases policy hashing can be disabled by default and
 	 enabled only if needed.
 	 enabled only if needed.
+
+config SECURITY_APPARMOR_DEBUG
+	bool "Build AppArmor with debug code"
+	depends on SECURITY_APPARMOR
+	default n
+	help
+	  Build apparmor with debugging logic in apparmor. Not all
+	  debugging logic will necessarily be enabled. A submenu will
+	  provide fine grained control of the debug options that are
+	  available.
+
+config SECURITY_APPARMOR_DEBUG_ASSERTS
+	bool "Build AppArmor with debugging asserts"
+	depends on SECURITY_APPARMOR_DEBUG
+	default y
+	help
+	  Enable code assertions made with AA_BUG. These are primarily
+	  function entry preconditions but also exist at other key
+	  points. If the assert is triggered it will trigger a WARN
+	  message.
+
+config SECURITY_APPARMOR_DEBUG_MESSAGES
+	bool "Debug messages enabled by default"
+	depends on SECURITY_APPARMOR_DEBUG
+	default n
+	help
+	  Set the default value of the apparmor.debug kernel parameter.
+	  When enabled, various debug messages will be logged to
+	  the kernel message buffer.

+ 13 - 1
security/apparmor/include/lib.h

@@ -35,12 +35,24 @@
  * which is not related to profile accesses.
  * which is not related to profile accesses.
  */
  */
 
 
+#define DEBUG_ON (aa_g_debug)
+#define dbg_printk(__fmt, __args...) pr_debug(__fmt, ##__args)
 #define AA_DEBUG(fmt, args...)						\
 #define AA_DEBUG(fmt, args...)						\
 	do {								\
 	do {								\
-		if (aa_g_debug)						\
+		if (DEBUG_ON)						\
 			pr_debug_ratelimited("AppArmor: " fmt, ##args);	\
 			pr_debug_ratelimited("AppArmor: " fmt, ##args);	\
 	} while (0)
 	} while (0)
 
 
+#define AA_WARN(X) WARN((X), "APPARMOR WARN %s: %s\n", __func__, #X)
+
+#define AA_BUG(X, args...) AA_BUG_FMT((X), "" args)
+#ifdef CONFIG_SECURITY_APPARMOR_DEBUG_ASSERTS
+#define AA_BUG_FMT(X, fmt, args...)					\
+	WARN((X), "AppArmor WARN %s: (" #X "): " fmt, __func__, ##args)
+#else
+#define AA_BUG_FMT(X, fmt, args...)
+#endif
+
 #define AA_ERROR(fmt, args...)						\
 #define AA_ERROR(fmt, args...)						\
 	pr_err_ratelimited("AppArmor: " fmt, ##args)
 	pr_err_ratelimited("AppArmor: " fmt, ##args)
 
 

+ 1 - 1
security/apparmor/lsm.c

@@ -681,7 +681,7 @@ module_param_named(hash_policy, aa_g_hash_policy, aabool, S_IRUSR | S_IWUSR);
 #endif
 #endif
 
 
 /* Debug mode */
 /* Debug mode */
-bool aa_g_debug;
+bool aa_g_debug = IS_ENABLED(CONFIG_SECURITY_DEBUG_MESSAGES);
 module_param_named(debug, aa_g_debug, aabool, S_IRUSR | S_IWUSR);
 module_param_named(debug, aa_g_debug, aabool, S_IRUSR | S_IWUSR);
 
 
 /* Audit mode */
 /* Audit mode */