From f6060918884a8a76493531dfa89fe65b608bc6ea Mon Sep 17 00:00:00 2001 From: FlareCoding Date: Thu, 20 Apr 2023 13:29:51 -0400 Subject: [PATCH 1/2] added conditonal check around elevate/lower in sym_get_fn_address to preserve elevation status --- src/LIDK/idk.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/LIDK/idk.c b/src/LIDK/idk.c index 037093a..f2c977e 100644 --- a/src/LIDK/idk.c +++ b/src/LIDK/idk.c @@ -54,16 +54,23 @@ void* sym_get_fn_address(char *symbol) { parse_system_map(); } + long already_elevated = sym_check_elevate(); + // Elevate to be able to call kallsyms_lookup_name - sym_elevate(); + if (!already_elevated) + sym_elevate(); + + // TODO: clean this up uint64_t user_stack; SYM_PRESERVE_USER_STACK(user_stack); SYM_SWITCH_TO_KERN_STACK(); void* result = (void*)kallsyms_lookup_name(symbol); SYM_RESTORE_USER_STACK(user_stack); - // Don't forget to lower - sym_lower(); + + // Don't forget to lower + if (!already_elevated) + sym_lower(); return (void*)result; } From 094fa5cf2fdc76e8acf242e4f5dfd08cb8d82015 Mon Sep 17 00:00:00 2001 From: FlareCoding Date: Fri, 25 Aug 2023 10:39:32 -0400 Subject: [PATCH 2/2] removed forced elevation/lowering in SYM_ON_KERN_STACK_DO --- include/L1/stack_switch.h | 4 +--- src/LIDK/idk.c | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/include/L1/stack_switch.h b/include/L1/stack_switch.h index f85da21..70625b9 100644 --- a/include/L1/stack_switch.h +++ b/include/L1/stack_switch.h @@ -7,14 +7,12 @@ // These must be used as a pair #define SYM_ON_KERN_STACK() \ - sym_elevate(); \ uint64_t user_stack; \ SYM_PRESERVE_USER_STACK(user_stack); \ SYM_SWITCH_TO_KERN_STACK(); #define SYM_ON_USER_STACK() \ - SYM_RESTORE_USER_STACK(user_stack); \ - sym_lower(); + SYM_RESTORE_USER_STACK(user_stack); // Combine the two above so we don't have to remember to call both // but put all of user code inbetween diff --git a/src/LIDK/idk.c b/src/LIDK/idk.c index f2c977e..d902172 100644 --- a/src/LIDK/idk.c +++ b/src/LIDK/idk.c @@ -59,7 +59,6 @@ void* sym_get_fn_address(char *symbol) { // Elevate to be able to call kallsyms_lookup_name if (!already_elevated) sym_elevate(); - // TODO: clean this up uint64_t user_stack;