Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "localdesktop"
version = "1.2.0"
version = "1.2.1"
edition = "2021"
build = "build.rs"
default-run = "build_apk"
Expand Down
Binary file modified assets/libs/arm64-v8a/libproot.so
Binary file not shown.
5 changes: 5 additions & 0 deletions patches/build-proot-android/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ guest rootfs is still dropped, except on the app's own files (a directory bound
into the guest, such as `/home`), so a script or binary written there can be
made executable.

And in `src/extension/fake_id0/fake_id0.c`: `fstat` on a socket, eventfd or other descriptor
that isn't a file gets the real `fstat`, instead of a `stat` of its `/proc/self/fd` link
(`socket:[N]`), which fails. Node checks its standard streams with `fstat`, and a child process
gets sockets for them, so every Node or Electron child process aborted at startup.

The shipped `libproot.so` is built with `./build.sh` (NDK r26d). On macOS, put a
GNU `install` (or a wrapper that handles `install -D`) first in `PATH`.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -807,7 +807,9 @@ static int handle_sysexit_end(Tracee *tracee, Config *config)

path[result] = '\0';

if ((strcmp(path + strlen(path) - strlen(" (deleted)"), " (deleted)") == 0) || (strncmp(path, "pipe", 4) == 0)) {
/* Not a file to stat by its path: deleted, or a pipe, socket, eventfd and the like, whose
* link reads "pipe:[N]", "socket:[N]", "anon_inode:[eventfd]". */
if ((strcmp(path + strlen(path) - strlen(" (deleted)"), " (deleted)") == 0) || (path[0] != '/')) {
register_chained_syscall(tracee, sysnum, peek_reg(tracee, ORIGINAL, SYSARG_1), peek_reg(tracee, ORIGINAL, SYSARG_2), 0, 0, 0, 0);
} else {
write_data(tracee, peek_reg(tracee, MODIFIED, SYSARG_3), path, sizeof(path));
Expand Down