Open oxr463 opened 3 years ago
Just to summarize what is known so far. proot-rs
does not currently work in termux (but can run proot-rs in the adb shell
).
Two errors have been found so far.
Bad address
The error is exactly the one you mentioned here:
https://github.com/proot-me/proot-rs/issues/35#issuecomment-898981925
I tried testing in Termux on my Motorola G7, Android 10, and here is what I got:
./proot-rs --rootfs=./alpine --bind /dev:/dev --bind /proc:/proc bash: ./proot-rs: Bad address echo $? 126
The characteristic is that echo $?
results in 126
The strange thing is that once I run again with RUST_LOG=trace
(which will generate more log):
RUST_LOG=trace ./proot-rs --rootfs=./alpine --bind /dev:/dev --bind /proc:/proc
This error disappears and does not appear anymore, even after restarting termux. I no longer see any Bad address
, and the exit code is no longer 126.
So I think it's a bug of termux.
Exit with code 159
This is the main error mentioned in current issue.
By setting RUST_LOG=trace
, we could get more logs:
The logs show that the first tracee process was successfully loaded by our loader-shim
, but was killed by a SIGSYS
signal shortly after leaving from the loader-shim
.
By analyzing the generated core dump file, it was found that the tracee was calling system call setgid32()
.
Since the problem did not occur when testing proot-rs in the adb shell, I think it may be related to seccomp.
➜ ~ adb shell
enchilada:/ $ whoami
shell
enchilada:/ $ cat /proc/self/status | grep Seccomp
Seccomp: 0
enchilada:/ $ cat /proc/`pidof com.termux`/status | grep Seccomp
Seccomp: 2