Merge branches 'acpi-pm' and 'acpi-docs'
[linux-2.6-microblaze.git] / lib / test_kasan.c
index e5647d1..785e724 100644 (file)
@@ -69,10 +69,10 @@ static void kasan_test_exit(struct kunit *test)
  * resource named "kasan_data". Do not use this name for KUnit resources
  * outside of KASAN tests.
  *
- * For hardware tag-based KASAN, when a tag fault happens, tag checking is
- * normally auto-disabled. When this happens, this test handler reenables
- * tag checking. As tag checking can be only disabled or enabled per CPU, this
- * handler disables migration (preemption).
+ * For hardware tag-based KASAN in sync mode, when a tag fault happens, tag
+ * checking is auto-disabled. When this happens, this test handler reenables
+ * tag checking. As tag checking can be only disabled or enabled per CPU,
+ * this handler disables migration (preemption).
  *
  * Since the compiler doesn't see that the expression can change the fail_data
  * fields, it can reorder or optimize away the accesses to those fields.
@@ -80,7 +80,8 @@ static void kasan_test_exit(struct kunit *test)
  * expression to prevent that.
  */
 #define KUNIT_EXPECT_KASAN_FAIL(test, expression) do {         \
-       if (IS_ENABLED(CONFIG_KASAN_HW_TAGS))                   \
+       if (IS_ENABLED(CONFIG_KASAN_HW_TAGS) &&                 \
+           !kasan_async_mode_enabled())                        \
                migrate_disable();                              \
        WRITE_ONCE(fail_data.report_expected, true);            \
        WRITE_ONCE(fail_data.report_found, false);              \
@@ -92,12 +93,16 @@ static void kasan_test_exit(struct kunit *test)
        barrier();                                              \
        expression;                                             \
        barrier();                                              \
+       if (kasan_async_mode_enabled())                         \
+               kasan_force_async_fault();                      \
+       barrier();                                              \
        KUNIT_EXPECT_EQ(test,                                   \
                        READ_ONCE(fail_data.report_expected),   \
                        READ_ONCE(fail_data.report_found));     \
-       if (IS_ENABLED(CONFIG_KASAN_HW_TAGS)) {                 \
+       if (IS_ENABLED(CONFIG_KASAN_HW_TAGS) &&                 \
+           !kasan_async_mode_enabled()) {                      \
                if (READ_ONCE(fail_data.report_found))          \
-                       kasan_enable_tagging();                 \
+                       kasan_enable_tagging_sync();            \
                migrate_enable();                               \
        }                                                       \
 } while (0)