kasan-add-kasanvmalloc-command-line-flag.patch removed from -mm tree
The patch titled
Subject: kasan: add kasan.vmalloc command line flag
has been removed from the -mm tree. Its filename was
kasan-add-kasanvmalloc-command-line-flag.patch
This patch was dropped because it was merged into mainline or a subsystem tree
------------------------------------------------------
From: Andrey Konovalov <[email protected]>
Subject: kasan: add kasan.vmalloc command line flag
Allow disabling vmalloc() tagging for HW_TAGS KASAN via a kasan.vmalloc command line switch.
This is a fail-safe switch intended for production systems that enable HW_TAGS KASAN. In case vmalloc() tagging ends up having an issue not detected during testing but that manifests in production, kasan.vmalloc allows to turn vmalloc() tagging off while leaving page_alloc/slab tagging on.
---
mm/kasan/hw_tags.c | 45 ++++++++++++++++++++++++++++++++++++++++++- mm/kasan/kasan.h | 6 +++++ 2 files changed, 50 insertions(+), 1 deletion(-)
mm/kasan/hw_tags.c renamed from mm/kasan/hw_tags.c~kasan-add-kasanvmalloc-command-line-flag +44 -1
@@ -32,6 +32,12 @@ enum kasan_arg_mode { KASAN_ARG_MODE_ASYMM, }; +enum kasan_arg_vmalloc { +KASAN_ARG_VMALLOC_DEFAULT , +KASAN_ARG_VMALLOC_OFF , +KASAN_ARG_VMALLOC_ON , +}; +enum kasan_arg_stacktrace {KASAN_ARG_STACKTRACE_DEFAULT ,KASAN_ARG_STACKTRACE_OFF ,
@@ -40,6 +46,7 @@ enum kasan_arg_stacktrace {static enum kasan_arg kasan_arg__ro_after_init ;static enum kasan_arg_mode kasan_arg_mode__ro_after_init ; +static enum kasan_arg_vmalloc kasan_arg_vmalloc__initdata ;static enum kasan_arg_stacktrace kasan_arg_stacktrace__initdata ;/*
@@ -56,6 +63,9 @@ EXPORT_SYMBOL(kasan_flag_enabled);enum kasan_mode kasan_mode__ro_after_init ;EXPORT_SYMBOL_GPL (kasan_mode); +/* Whether to enable vmalloc tagging. */ +DEFINE_STATIC_KEY_TRUE (kasan_flag_vmalloc); +/* Whether to collect alloc/free stack traces. */ DEFINE_STATIC_KEY_TRUE (kasan_flag_stacktrace);
@@ -95,6 +105,23 @@ static int __init early_kasan_mode(char }early_param ("kasan.mode" , early_kasan_mode); +/* kasan.vmalloc=off/on */ +static int __init early_kasan_flag_vmalloc (char *arg) +{ +if (!arg) +return -EINVAL ; + +if (!strcmp (arg,"off" )) + kasan_arg_vmalloc =KASAN_ARG_VMALLOC_OFF ; +else if (!strcmp (arg,"on" )) + kasan_arg_vmalloc =KASAN_ARG_VMALLOC_ON ; +else +return -EINVAL ; + +return 0 ; +} +early_param ("kasan.vmalloc" , early_kasan_flag_vmalloc); +/* kasan.stacktrace=off/on */ static int __init early_kasan_flag_stacktrace (char *arg) {
@@ -179,6 +206,18 @@ void __init kasan_init_hw_tags(void)break ; } +switch (kasan_arg_vmalloc) { +case KASAN_ARG_VMALLOC_DEFAULT : +/* Default is specified by kasan_flag_vmalloc definition. */ +break ; +case KASAN_ARG_VMALLOC_OFF : +static_branch_disable (&kasan_flag_vmalloc); +break ; +case KASAN_ARG_VMALLOC_ON : +static_branch_enable (&kasan_flag_vmalloc); +break ; + } +switch (kasan_arg_stacktrace) {case KASAN_ARG_STACKTRACE_DEFAULT :/* Default is specified by kasan_flag_stacktrace definition. */
@@ -194,8 +233,9 @@ void __init kasan_init_hw_tags(void)/* KASAN is now initialized, enable it. */ static_branch_enable (&kasan_flag_enabled); -pr_info ("KernelAddressSanitizer initialized (hw-tags, mode=%s, stacktrace=%s)\n" , +pr_info ("KernelAddressSanitizer initialized (hw-tags, mode=%s, vmalloc=%s, stacktrace=%s)\n" ,kasan_mode_info (), +kasan_vmalloc_enabled () ?"on" :"off" ,kasan_stack_collection_enabled () ?"on" :"off" ); }
@@ -228,6 +268,9 @@ void *__kasan_unpoison_vmalloc(const voiu8 tag;unsigned long redzone_start, redzone_size; +if (!kasan_vmalloc_enabled ()) +return (void *)start; +if (!is_vmalloc_or_module_addr (start))return (void *)start;
mm/kasan/kasan.h renamed from mm/kasan/kasan.h~kasan-add-kasanvmalloc-command-line-flag +6 -0
@@ -12,6 +12,7 @@#include <linux/static_key.h> #include "../slab.h" +DECLARE_STATIC_KEY_TRUE (kasan_flag_vmalloc);DECLARE_STATIC_KEY_TRUE (kasan_flag_stacktrace);enum kasan_mode {
@@ -22,6 +23,11 @@ enum kasan_mode {extern enum kasan_mode kasan_mode__ro_after_init ; +static inline bool kasan_vmalloc_enabled (void ) +{ +return static_branch_likely (&kasan_flag_vmalloc); +} +static inline bool kasan_stack_collection_enabled (void ) {return static_branch_unlikely (&kasan_flag_stacktrace);
_
Patches currently in -mm which might be from [email protected] are
stacktrace-add-interface-based-on-shadow-call-stack.patch arm64-scs-save-scs_sp-values-per-cpu-when-switching-stacks.patch arm64-implement-stack_trace_save_shadow.patch kasan-use-stack_trace_save_shadow.patch