* refactor: replace throne tracker with ksud token
* use snprintf
* refactor: new supercall impl
- Import the sukisu command
* disable seccomp for supercall users
* kernel: fmt clear
* kernel: Enable macro protection for sulog
- Only enabled on kernel versions greater than 5.10.245
* kernel: Refactor kprobe hooks and implement LSM hooks for improved security handling
* debug mode
* kernel: Add functionality to generate and validate authentication tokens for cmd_su
* kernel: Simplified manual SU command processing for code
* kernel: replace renameat hook with fsnotify
* Revert "refactor: replace throne tracker with ksud token"
This reverts commit aa2cbbf9cd.
* kernel: fix compile
* kernel: fix compile below 6.0
* Fix compile err; Add become_manager
* kernel: install fd for manager automaticlly
- extend to import the corresponding command
* manager: new supercall impl
* temp changes for ksud
* ksud: fix compile
* fix wrong opcode
* kernel: fix compile
* kernel: Fixed hook type and KPM status retrieval errors
* kernel: Fixed potential null pointer issue with current->mm in kernel version 5.10
When calling get_full_comm() within system call hooks, current->mm may be null (prctl). A fallback mechanism for current->comm must be added beforehand to prevent null pointer dereferences when accessing mm->arg_start/arg_end.
Signed-off-by: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com>
* ksud: fix cargo check
* manager: Fixed an issue where the KSUD release and user-mode scanning switch failed to function correctly.
- kernel: fix spin lock mutual
kernel: Fixed potential null pointer issue with current->mm in kernel version 5.10
When calling get_full_comm() within system call hooks, current->mm may be null (prctl). A fallback mechanism for current->comm must be added beforehand to prevent null pointer dereferences when accessing mm->arg_start/arg_end.
kernel: try introduce like susfs's method to fix prctl delay
* seccomp: allow reboot
* use u32
* update clang-format
* 4 spaces save the world
* ksud: Fix build on macOS
* manager: bump minimal supported kernel.
- When get_hook_type is empty, display “Unknown”.
* Fix ksud build (#2841)
* try fix ksud
* fix for macos
* remove any
* Fix ksud build, take 3
* try fix allowlist
* bring lsm hook back
* fix: a lot again
* Fix ksud build, take 4 (#2846)
Remove init_driver_fd function for non-linux/android targets
* manager: Return to the native method via KSUd installation
* Merge with susfs-mian format
---------
Signed-off-by: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com>
Co-authored-by: Ylarod <me@ylarod.cn>
Co-authored-by: weishu <twsxtd@gmail.com>
Co-authored-by: AlexLiuDev233 <wzylin11@outlook.com>
Co-authored-by: Wang Han <416810799@qq.com>
71 lines
2.7 KiB
C
71 lines
2.7 KiB
C
|
|
#ifndef KERNELSU_PRELUDE_H
|
|
#define KERNELSU_PRELUDE_H
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include <stdbool.h>
|
|
#include <jni.h>
|
|
#include <android/log.h>
|
|
|
|
#define GetEnvironment() (*env)
|
|
#define NativeBridge(fn, rtn, ...) JNIEXPORT rtn JNICALL Java_com_sukisu_ultra_Natives_##fn(JNIEnv* env, jclass clazz, __VA_ARGS__)
|
|
#define NativeBridgeNP(fn, rtn) JNIEXPORT rtn JNICALL Java_com_sukisu_ultra_Natives_##fn(JNIEnv* env, jclass clazz)
|
|
|
|
// Macros to simplify field setup
|
|
#define SET_BOOLEAN_FIELD(obj, cls, fieldName, value) do { \
|
|
jfieldID field = GetEnvironment()->GetFieldID(env, cls, #fieldName, "Z"); \
|
|
GetEnvironment()->SetBooleanField(env, obj, field, value); \
|
|
} while(0)
|
|
|
|
#define SET_INT_FIELD(obj, cls, fieldName, value) do { \
|
|
jfieldID field = GetEnvironment()->GetFieldID(env, cls, #fieldName, "I"); \
|
|
GetEnvironment()->SetIntField(env, obj, field, value); \
|
|
} while(0)
|
|
|
|
#define SET_STRING_FIELD(obj, cls, fieldName, value) do { \
|
|
jfieldID field = GetEnvironment()->GetFieldID(env, cls, #fieldName, "Ljava/lang/String;"); \
|
|
GetEnvironment()->SetObjectField(env, obj, field, GetEnvironment()->NewStringUTF(env, value)); \
|
|
} while(0)
|
|
|
|
#define SET_OBJECT_FIELD(obj, cls, fieldName, value) do { \
|
|
jfieldID field = GetEnvironment()->GetFieldID(env, cls, #fieldName, "Ljava/util/List;"); \
|
|
GetEnvironment()->SetObjectField(env, obj, field, value); \
|
|
} while(0)
|
|
|
|
// Macros for creating Java objects
|
|
#define CREATE_JAVA_OBJECT(className) ({ \
|
|
jclass cls = GetEnvironment()->FindClass(env, className); \
|
|
jmethodID constructor = GetEnvironment()->GetMethodID(env, cls, "<init>", "()V"); \
|
|
GetEnvironment()->NewObject(env, cls, constructor); \
|
|
})
|
|
|
|
// Macros for creating ArrayList
|
|
#define CREATE_ARRAYLIST() ({ \
|
|
jclass arrayListCls = GetEnvironment()->FindClass(env, "java/util/ArrayList"); \
|
|
jmethodID constructor = GetEnvironment()->GetMethodID(env, arrayListCls, "<init>", "()V"); \
|
|
GetEnvironment()->NewObject(env, arrayListCls, constructor); \
|
|
})
|
|
|
|
// Macros for adding elements to an ArrayList
|
|
#define ADD_TO_LIST(list, item) do { \
|
|
jclass cls = GetEnvironment()->GetObjectClass(env, list); \
|
|
jmethodID addMethod = GetEnvironment()->GetMethodID(env, cls, "add", "(Ljava/lang/Object;)Z"); \
|
|
GetEnvironment()->CallBooleanMethod(env, list, addMethod, item); \
|
|
} while(0)
|
|
|
|
// Macros for creating Java objects with parameter constructors
|
|
#define CREATE_JAVA_OBJECT_WITH_PARAMS(className, signature, ...) ({ \
|
|
jclass cls = GetEnvironment()->FindClass(env, className); \
|
|
jmethodID constructor = GetEnvironment()->GetMethodID(env, cls, "<init>", signature); \
|
|
GetEnvironment()->NewObject(env, cls, constructor, __VA_ARGS__); \
|
|
})
|
|
|
|
#ifdef NDEBUG
|
|
#define LogDebug(...) (void)0
|
|
#else
|
|
#define LogDebug(...) __android_log_print(ANDROID_LOG_DEBUG, "KernelSU", __VA_ARGS__)
|
|
#endif
|
|
|
|
#endif
|