KernelSU 解决方案:解决 openRemoteFile 创建文件 SELinux 上下文问题
在升级到 1.10.2 版本后,现代 API 函数 openRemoteFile
创建的文件出现了错误的 SELinux 上下文,导致写操作失败并返回 XposedServiceError
。本文将探讨如何复现此问题,并提供相应的解决方案。
问题复现步骤
移除之前的模块数据:
rm -rf /data/adb/lspd/modules/0/*
- 使用 1.10.2 版本构建并运行官方示例项目:
官方示例项目 - 使用
openRemoteFile
创建文件 - 尝试向文件写入数据
- 观察失败情况并检查 SELinux 上下文
预期行为
在 1.10.1 版本中,通过 openRemoteFile
创建的文件应该具有以下 SELinux 上下文:
u:object_r:magisk_file:s0
写操作应成功执行。
实际行为
在 1.10.2 版本中,文件创建时会出现以下 SELinux 上下文:
u:object_r:xposed_file:s0
任何尝试向文件写入的操作都会导致 XposedServiceError
。
Xposed 模块列表
仅 LSPosed 中的示例
Root 方案
在 Magisk 和 KSU Next 上进行了测试。
系统模块列表
仅 lsposed 在 Magisk 中
LSPosed 版本
1.10.2
Android 版本
14
版本要求
- 使用来自 GitHub Actions 的最新调试版本。
日志
在 1.10.2 版本中,日志显示以下错误:
07-29 15:07:04.858 21099 21099 E AndroidRuntime: FATAL EXCEPTION: main
07-29 15:07:04.858 21099 21099 E AndroidRuntime: Process: io.github.libxposed.example, PID: 21099
07-29 15:07:04.858 21099 21099 E AndroidRuntime: io.github.libxposed.service.XposedService$ServiceException: Xposed service error
...
Caused by: android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died, but this could also be caused by running out of binder buffer space
解决方案
为了解决这个问题,可以手动将 SELinux 上下文更改为 magisk_file
。使用以下命令:
chcon u:object_r:magisk_file:s0 <file>
通过这种方式,文件创建时将使用正确的 SELinux 上下文,从而允许写操作成功执行。
结论
通过上述步骤,我们可以复现 1.10.2 版本中 openRemoteFile
创建文件时 SELinux 上下文错误的问题,并提供相应的解决方案。通过手动更改 SELinux 上下文,可以确保文件操作的正确性和稳定性。
评论已关闭