Vendor the pinned Rustix package with an Android-only weak libc lookup so missing statx returns ENOSYS and uses the existing stat64 fallback. Add an isolated Android smoke test with a hidden symbol and a seccomp filter that kills raw statx probes. Verified 177 workspace tests, host Clippy, and ARM64 Android sandbox smoke test. ARM32 cross-target Clippy passes with the existing needless_return warning in binary.rs exempted; physical Android 10 ARM32 validation remains required.
1.8 KiB
Vendored
Rustix Android compatibility patch
rustix-1.1.4 is vendored from the pinned crates.io package using cargo vendor.
Its upstream license files are retained. Cargo's workspace patch applies to both
direct users and transitive dependencies such as cap-std.
The original package checksum is
b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190.
The sole upstream source change is in src/backend/libc/fs/syscalls.rs: Android
uses weakcall! for statx, rather than weak_or_syscall!. Bionic exports this
function from API 30. On earlier releases, probing the raw syscall can terminate
the app with SIGSYS/SYS_SECCOMP instead of returning an error (observed on
Android 10 ARM32, syscall 397 during read_audio_metadata). Missing symbols now
return ENOSYS, allowing the existing fstat64/fstatat64 fallback. Newer Android
continues to use Bionic's statx; non-Android targets retain upstream behavior.
References:
When upgrading Rustix, check whether upstream has fixed this path before removing the patch. Keep the Android metadata smoke test and verify both APK ABIs.
Run bash scripts/check_android_statx.sh arm64-v8a (or armeabi-v7a) with
ANDROID_NDK_HOME set and a matching Android device connected through adb.
The isolated test executable checks regular metadata access, then hides the libc
symbol and blocks the raw syscall to exercise the legacy fallback. A final probe
deliberately exits with SIGSYS to verify that the filter is active. Neither the
symbol wrapper nor the filter is included in the application. This simulated
sandbox check complements testing the APK on an actual older ARM32 device.