mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-11 11:01:07 +00:00
The runtime carries Termux's proot 5.1.107-70 as a prebuilt binary, built from termux/proot 4dba3afb (every file:line site in it matches that commit). The apk now builds that same commit with the NDK, with three patches ported from WinNative's feature/proot-enhancements, and prefers it over the runtime's copy: - Tracees are hashed by pid, so each ptrace stop finds its tracee without walking a list of every thread, and terminated tracees are swept only after a termination. - A clean absolute path three or more directories deep under the rootfs alone has its parent opened once and taken as canonical when the kernel's path for it is the one proot would build, instead of an lstat per component; the final component of a call that does not follow it is no longer lstat'ed. Extensions still see the parent's host path, and the f2fs workaround keeps the old walk. - A clone3 thread keeps its inherited flags when clone_args cannot be read. talloc is linked in statically from Samba's release tarball, so libproot.so needs only libc and libdl. On an x86_64 Android 15 emulator the same build ran a path and thread test suite with output identical to the unpatched commit (fake id, fake root, link2symlink, with and without seccomp), and a stat-heavy benchmark ran 25-27% faster, 31-36% with 1500 live threads.
1.4 KiB
1.4 KiB
proot patches carried by the app
Built by tools/proot/build.sh with the NDK on top of termux/proot 4dba3afb (Termux's
5.1.107-70 package, the proot the Linux runtime ships at opt/android-host/proot; every
file.c:line site in that binary matches this commit). talloc is linked in statically from
Samba's release tarball, so the apk carries one self-contained libproot.so plus
libproot-loader.so, and LinuxRuntime prefers them over the runtime's copy.
Ported from WinNative (feature/proot-enhancements, e7af0f24):
0001-tracee-lookup-by-pid.patch- tracees are hashed by pid, so each ptrace stop finds its tracee without walking one list entry per thread, and terminated tracees are swept only after a termination.0002-canon-resolve-parent-at-once.patch- a clean absolute guest path at least three directories deep under the rootfs binding alone has its parent opened once withO_PATHand taken as canonical when/proc/self/fdnames the path proot would build, replacing anlstatper component. The final component of a call that does not follow it is no longerlstated. Extensions still see the parent's host path, and the fast path stays off while the f2fs workaround is active.0003-clone3-flags-read-guard.patch- a thread created withclone3keeps the flags it inherited whenstruct clone_argscannot be read, instead of being tracked as a fork.