From d7e998eaf22dce57d707e4b6e65f0d246982287e Mon Sep 17 00:00:00 2001 From: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Date: Sun, 16 Nov 2025 17:19:13 +0800 Subject: [PATCH] kernel/manager/ksud: Add switch functionality to sulog Signed-off-by: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> --- kernel/feature.h | 1 + kernel/manual_su.c | 1 + kernel/sulog.c | 30 +++++++++++++++++++++++++++++- kernel/sulog.h | 2 +- 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/kernel/feature.h b/kernel/feature.h index 6fd564bb..e5286c81 100644 --- a/kernel/feature.h +++ b/kernel/feature.h @@ -7,6 +7,7 @@ enum ksu_feature_id { KSU_FEATURE_SU_COMPAT = 0, KSU_FEATURE_KERNEL_UMOUNT = 1, KSU_FEATURE_ENHANCED_SECURITY = 2, + KSU_FEATURE_SULOG = 3, KSU_FEATURE_MAX }; diff --git a/kernel/manual_su.c b/kernel/manual_su.c index f1cbee6f..e859a91c 100644 --- a/kernel/manual_su.c +++ b/kernel/manual_su.c @@ -8,6 +8,7 @@ #include #include #include + #include "manual_su.h" #include "ksu.h" #include "allowlist.h" diff --git a/kernel/sulog.c b/kernel/sulog.c index 24bf8acb..00b8b1ca 100644 --- a/kernel/sulog.c +++ b/kernel/sulog.c @@ -16,6 +16,7 @@ #include "klog.h" #include "sulog.h" #include "ksu.h" +#include "feature.h" #if __SULOG_GATE @@ -24,7 +25,28 @@ static DEFINE_SPINLOCK(dedup_lock); static LIST_HEAD(sulog_queue); static struct workqueue_struct *sulog_workqueue; static struct work_struct sulog_work; -static bool sulog_enabled = true; +static bool sulog_enabled __read_mostly = true; + +static int sulog_feature_get(u64 *value) +{ + *value = sulog_enabled ? 1 : 0; + return 0; +} + +static int sulog_feature_set(u64 value) +{ + bool enable = value != 0; + sulog_enabled = enable; + pr_info("sulog: set to %d\n", enable); + return 0; +} + +static const struct ksu_feature_handler sulog_handler = { + .feature_id = KSU_FEATURE_SULOG, + .name = "sulog", + .get_handler = sulog_feature_get, + .set_handler = sulog_feature_set, +}; static void get_timestamp(char *buf, size_t len) { @@ -303,6 +325,10 @@ void ksu_sulog_report_syscall(uid_t uid, const char *comm, const char *syscall, int ksu_sulog_init(void) { + if (ksu_register_feature_handler(&sulog_handler)) { + pr_err("Failed to register sulog feature handler\n"); + } + sulog_workqueue = alloc_workqueue("ksu_sulog", WQ_UNBOUND | WQ_HIGHPRI, 1); if (!sulog_workqueue) { pr_err("sulog: failed to create workqueue\n"); @@ -319,6 +345,8 @@ void ksu_sulog_exit(void) struct sulog_entry *entry, *tmp; unsigned long flags; + ksu_unregister_feature_handler(KSU_FEATURE_SULOG); + sulog_enabled = false; if (sulog_workqueue) { diff --git a/kernel/sulog.h b/kernel/sulog.h index 7890c514..b1243554 100644 --- a/kernel/sulog.h +++ b/kernel/sulog.h @@ -12,7 +12,7 @@ extern struct timezone sys_tz; #define SULOG_PATH "/data/adb/ksu/log/sulog.log" -#define SULOG_MAX_SIZE (128 * 1024 * 1024) // 128MB +#define SULOG_MAX_SIZE (32 * 1024 * 1024) // 128MB #define SULOG_ENTRY_MAX_LEN 512 #define SULOG_COMM_LEN 256 #define DEDUP_SECS 10