在提交问题之前,请确保您已经检查了以下几点:
- 您已经搜索过现有问题,但没有找到相关内容。
- 您将在KernelSU管理器设置中上传bug报告文件。
- 您知道如何重现问题,且该问题可能并非特定于您的设备。
描述问题:
当编译GrapheneOS的Hardened Kernel用于GKI2设备并启动时,管理器无法检测到内置的KernelSU [commit 90c24bd38dd1f0582ec78a43a52232231b4d3182 (HEAD -> builtin, origin/builtin)]。内核日志显示它已加载并识别/crown SukiSU管理器,但管理器无法检测到它或使用它。我已经追踪了代码,并确定了一个解决方案,它将允许应用程序检测。
GrapheneOS硬化内核:[commit fbabc514b442a46e1634c9ea2e2b47b32639c111 (tag: 2026011300)],aosp子文件夹(内核代码):[commit 2a5eb9281a1da26befafbf4cedca20194073a218 (HEAD, tag: 2026011300)]
这个问题可以在内核6.1.159-android14-11上重现,但应该适用于所有6.1内核。它与Susfs无关,我使用手动钩子(带和未带susfs代码/补丁)在内核中重现/解决了这个问题。
在文件kernel/supercalls.c中,我们有:
// 安装KSU fd到当前进程
int ksu_install_fd(void)
{
struct file *filp;
int fd;
// 获取未使用的fd
fd = get_unused_fd_flags(O_CLOEXEC);解决方案是不使用O_CLOEXEC,所以行将是
fd = get_unused_fd_flags(0);进行此修改后,应用程序能够正确检测到内核中内置的KernelSU。
在设备Google pixel 8a (akita)上测试。
您可以通过以下方式获取GKI2硬化内核:
git clone https://gitlab.com/grapheneos/kernel_pixel.git -b 2026011300 --recurse-submodulesSusfs simonpunk kernelpatch需要微小的修改 [commit 56c3fe4c27dea64adee86df250a751b0b92c2787 (HEAD -> gki-android14-6.1, origin/gki-android14-6.1)]:
diff --git a/kernel_patches/50_add_susfs_in_gki-android14-6.1.patch b/kernel_patches/50_add_susfs_in_gki-android14-6.1.patch
index 10a77a4..0e327d3 100644
--- a/kernel_patches/50_add_susfs_in_gki-android14-6.1.patch
+++ b/kernel_patches/50_add_susfs_in_gki-android14-6.1.patch
@@ -85,15 +85,15 @@ index 05ec9e6966cf..516d40054eef 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -64,6 +64,9 @@
- #include <linux/io_uring.h>
#include <linux/syscall_user_dispatch.h>
#include <linux/coredump.h>
+ #include <linux/random.h>
+#ifdef CONFIG_KSU_SUSFS
+#include <linux/susfs_def.h>
+#endif
-
- #include <linux/uaccess.h>
- #include <asm/mmu_context.h>
+
+ #ifndef __GENKSYMS__
+ #include <linux/dma-buf.h>
@@ -1879,6 +1882,17 @@ static int bprm_execve(struct linux_binprm *bprm,
return retval;
}
@@ -1027,9 +1027,9 @@ index bf14f94df793..0ad67e7d7879 100644
+#ifdef CONFIG_KSU_SUSFS_SUS_MAP
+#include <linux/susfs_def.h>
+#endif
+ #include <linux/dma-buf.h>
#include <trace/events/oom.h>
#include <trace/hooks/sched.h>
- #include "internal.h"
@@ -913,6 +916,9 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
ssize_t copied;
char *page;
</code></pre>
我假设管理器在未修改的GKI的内置版本中工作正常,问题出现在像GrapheneOS这样的硬化内核上,我没有测试/尝试过不同的内核...
重现步骤:
打开管理器应用。
您可以看到顶部显示“未安装”,但root本身是工作的,只是管理器。
我使用我提到的修改启动了内核,它正确检测到了root,然后我授予了一些应用root权限。
重启使用没有我的补丁的内核(再次),管理器无法检测到root,但之前配置的应用仍然保留root访问权限。
预期行为:
我期望管理器能够识别已启动内核中内置的KernelSU,并允许我管理事物...
屏幕截图:
 referrerpolicy="no-referrer"
日志:
日志已从管理器应用捕获,并在使用以下命令过滤时生成:grep -Ei 'KernelSU|ksud|sukisu|susfs' logcat.txt >logcat_relevant.txt
grep -Ei 'KernelSU|ksud|sukisu|susfs' dmesg.txt > dmesg_relevant.txt
[logs_relevant.tar.gz](https://github.com/user-attachments/files/24847422/logs_relevant.tar.gz)
设备信息:
- 设备:Google pixel 8a
- OS版本:Grapheneos 2026011300 (Android 16)
- KernelSU版本:4.1.0
- 内核版本:6.1.159-android14-11-g2a5eb9281a1d
-- SUSFS_VERSION: v2.0.0
-- SukiSU-Ultra版本(GitHub):40283
-- SukiSU-Ultra版本(Github):v4.1.0-cbe1bf29@HEAD
-- KernelSU: CONFIG_KSU_MANUAL_HOOK
-- KERNEL_VERSION: 6.1
-- KERNEL_TYPE: GKI 2.0
-- KPM已启用
附加上下文:
评论已关闭