Thread (23 messages) 23 messages, 4 authors, 2021-01-22

Re: [PATCH v5 2/6] kasan: Add KASAN mode kernel parameter

From: Vincenzo Frascino <vincenzo.frascino@arm.com>
Date: 2021-01-22 11:28:05
Also in: lkml


On 1/21/21 5:34 PM, Andrey Konovalov wrote:
quoted
+- ``kasan.mode=sync`` or ``=async`` controls whether KASAN is configured in
+  synchronous or asynchronous mode of execution (default: ``sync``).
+  ``synchronous mode``: an exception is triggered if a tag check fault occurs.
Synchronous mode: a bad access is detected immediately when a tag
check fault occurs.

(No need for `` here, "synchronous mode" is not an inline snippet.)
Ok will do in v5.
quoted
+  ``asynchronous mode``: if a tag check fault occurs, the information is stored
+  asynchronously in hardware (e.g. in the TFSR_EL1 register for arm64). The kernel
+  checks the hardware location and reports an error if the fault is detected.
Asynchronous mode: a bad access detection is delayed. When a tag check
fault occurs, the information is stored in hardware (in the TFSR_EL1
register for arm64). The kernel periodically checks the hardware and
only reports tag faults during these checks.
Will do in v5.
quoted
+
 - ``kasan.stacktrace=off`` or ``=on`` disables or enables alloc and free stack
   traces collection (default: ``on`` for ``CONFIG_DEBUG_KERNEL=y``, otherwise
   ``off``).
diff --git a/lib/test_kasan.c b/lib/test_kasan.c
index d16ec9e66806..7285dcf9fcc1 100644
--- a/lib/test_kasan.c
+++ b/lib/test_kasan.c
@@ -97,7 +97,7 @@ static void kasan_test_exit(struct kunit *test)
                        READ_ONCE(fail_data.report_found));     \
        if (IS_ENABLED(CONFIG_KASAN_HW_TAGS)) {                 \
                if (READ_ONCE(fail_data.report_found))          \
-                       hw_enable_tagging();                    \
+                       hw_enable_tagging_sync();               \
                migrate_enable();                               \
        }                                                       \
 } while (0)
diff --git a/mm/kasan/hw_tags.c b/mm/kasan/hw_tags.c
index e529428e7a11..224a2187839c 100644
--- a/mm/kasan/hw_tags.c
+++ b/mm/kasan/hw_tags.c
@@ -25,6 +25,11 @@ enum kasan_arg {
        KASAN_ARG_ON,
 };

+enum kasan_arg_mode {
+       KASAN_ARG_MODE_SYNC,
+       KASAN_ARG_MODE_ASYNC,
For other modes I explicitly added a _DEFAULT option first. It makes
sense to do this here as well for consistency.
Will do in v5.
quoted
+};
+
 enum kasan_arg_stacktrace {
        KASAN_ARG_STACKTRACE_DEFAULT,
        KASAN_ARG_STACKTRACE_OFF,
@@ -38,6 +43,7 @@ enum kasan_arg_fault {
 };

 static enum kasan_arg kasan_arg __ro_after_init;
+static enum kasan_arg_mode kasan_arg_mode __ro_after_init;
 static enum kasan_arg_stacktrace kasan_arg_stacktrace __ro_after_init;
 static enum kasan_arg_fault kasan_arg_fault __ro_after_init;
@@ -68,6 +74,21 @@ static int __init early_kasan_flag(char *arg)
 }
 early_param("kasan", early_kasan_flag);

+/* kasan.mode=sync/async */
+static int __init early_kasan_mode(char *arg)
+{
+       /* If arg is not set the default mode is sync */
+       if ((!arg) || !strcmp(arg, "sync"))
+               kasan_arg_mode = KASAN_ARG_MODE_SYNC;
+       else if (!strcmp(arg, "async"))
+               kasan_arg_mode = KASAN_ARG_MODE_ASYNC;
+       else
+               return -EINVAL;
+
+       return 0;
+}
+early_param("kasan.mode", early_kasan_mode);
+
 /* kasan.stacktrace=off/on */
 static int __init early_kasan_flag_stacktrace(char *arg)
 {
@@ -115,7 +136,11 @@ void kasan_init_hw_tags_cpu(void)
                return;

        hw_init_tags(KASAN_TAG_MAX);
-       hw_enable_tagging();
+
Let's add a comment:

/* Enable async mode only when explicitly requested through the command line. */
Will do in v5.

-- 
Regards,
Vincenzo

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help