kasan: mimic the kernel's setup Kasan has 2 tier calls, an early init call followed by a setup_arch() specific call. Our work will be to find a solution that fits using the tables. Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org>
diff --git a/kasan.c b/kasan.c index 2867039..5f6ef85 100644 --- a/kasan.c +++ b/kasan.c
@@ -6,6 +6,7 @@ static bool __is_kasan_setup = false; int kasan_early_init(void) { + printf("Early init for Kasan...\n"); __is_kasan_setup = true; return 0; } @@ -15,22 +16,8 @@ return __is_kasan_setup; } -static int init_kasan(void) { - sleep(1); - +void setup_arch_kasan(void) { if (!is_kasan_setup()) - return -EOPNOTSUPP; - - return 0; + return; + printf("Calling setup_arch work for Kasan...\n"); } - -static int detect_kasan(void) { - return 1; -} - -struct init_fn kasan_init_fn __init_fn(INIT_EARLY) = { - .detect = detect_kasan, - .early_init = init_kasan, - .name = "Kasan", - .critical = true, -};
diff --git a/kasan.h b/kasan.h index 173e3fa..9f7656b 100644 --- a/kasan.h +++ b/kasan.h
@@ -1,4 +1,5 @@ #include <stdbool.h> int kasan_early_init(void); +void setup_arch_kasan(void); bool is_kasan_setup(void);
diff --git a/start_kernel.c b/start_kernel.c index 266f5c5..8f3b1ae 100644 --- a/start_kernel.c +++ b/start_kernel.c
@@ -5,8 +5,9 @@ int start_kernel(void) { + printf("Calling start_kernel()...\n"); + setup_arch(); return late_init(); } -
diff --git a/x86.c b/x86.c index 42c35bb..328b822 100644 --- a/x86.c +++ b/x86.c
@@ -17,8 +17,8 @@ { int ret; - sort_table(__tbl, __tbl_end); - check_table_entries(__tbl, __tbl_end); + sort_table(__tbl, __tbl_end); + check_table_entries(__tbl, __tbl_end); ret = early_init(); if (ret) { @@ -42,4 +42,6 @@ void setup_arch(void) { setup_arch_init(); + if (is_kasan_setup()) + setup_arch_kasan(); }
diff --git a/xen.c b/xen.c index 219c017..9c0a9eb 100644 --- a/xen.c +++ b/xen.c
@@ -19,8 +19,8 @@ __booting_xen = true; - sort_table(__tbl, __tbl_end); - check_table_entries(__tbl, __tbl_end); + sort_table(__tbl, __tbl_end); + check_table_entries(__tbl, __tbl_end); ret = early_init(); if (ret) {