From 4fa8555613f71b27e09de342bab99d2dbaefaaf5 Mon Sep 17 00:00:00 2001 From: mister-teddy Date: Sat, 31 Oct 2026 18:36:09 +0100 Subject: [PATCH 1/2] fix: update proot to local desktop's build, with api 23, gpu ioctls untrapped and chmod in /home --- assets/libs/arm64-v8a/libproot.so | Bin 245816 -> 246456 bytes patches/build-proot-android/README.md | 13 ++ .../proot/src/extension/fake_id0/chmod.c | 9 +- .../build/proot/src/syscall/seccomp.c | 112 +++++++++++++++--- patches/build-proot-android/config | 2 +- 5 files changed, 115 insertions(+), 21 deletions(-) diff --git a/assets/libs/arm64-v8a/libproot.so b/assets/libs/arm64-v8a/libproot.so index 7af03106563f18ee0205e80ea770fb3794985350..3e312469dd187a65660878074e95c15a32e73199 100755 GIT binary patch delta 80734 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 ND2j?dTe6dk`^$1`>O4js1~7bhWn2=3Gw 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 K3D6=i82$@AN2Xo? diff --git a/patches/build-proot-android/README.md b/patches/build-proot-android/README.md index c6488b3..145f497 100644 --- a/patches/build-proot-android/README.md +++ b/patches/build-proot-android/README.md @@ -20,4 +20,17 @@ was current on March 31, 2026: `ab2e3464d04483b98a0614b470f3f8950d5a6468` (committed on February 21, 2026). This repo still carries a small set of downstream Android/APK build patches on top of that source snapshot. +One of them is in `src/syscall/seccomp.c`: the seccomp filter traps only the +`ioctl` requests PRoot rewrites (the `TCSETS*`/`TCGETS2` family and `FICLONE`) +instead of every `ioctl`, so GPU drivers in the guest (Turnip on KGSL) don't +stop at the tracer on each command submission. + +Another is in `src/extension/fake_id0/chmod.c`: `chmod` on a file outside the +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. + +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`. + See https://github.com/green-green-avk/proot for more info. diff --git a/patches/build-proot-android/build/proot/src/extension/fake_id0/chmod.c b/patches/build-proot-android/build/proot/src/extension/fake_id0/chmod.c index e1accbc..e1d5c35 100644 --- a/patches/build-proot-android/build/proot/src/extension/fake_id0/chmod.c +++ b/patches/build-proot-android/build/proot/src/extension/fake_id0/chmod.c @@ -1,4 +1,6 @@ #include +#include +#include #include #include "syscall/sysnum.h" @@ -28,8 +30,13 @@ int handle_chmod_enter_end(Tracee *tracee, Reg path_sysarg, Reg mode_sysarg, status = read_sysarg_path(tracee, path, path_sysarg, CURRENT); if(status < 0) return status; - // If the file exists outside the guestfs, drop the syscall. + // If the file exists outside the guestfs, drop the syscall, unless it is + // the app's own (a directory bound into the guest, such as /home): then + // let the real chmod through, or an executable written there never runs. else if(status == 1) { + struct stat host; + if(stat(path, &host) == 0 && host.st_uid == getuid()) + return 0; set_sysnum(tracee, PR_getuid); return 0; } diff --git a/patches/build-proot-android/build/proot/src/syscall/seccomp.c b/patches/build-proot-android/build/proot/src/syscall/seccomp.c index 6d1ba47..12f7bdf 100644 --- a/patches/build-proot-android/build/proot/src/syscall/seccomp.c +++ b/patches/build-proot-android/build/proot/src/syscall/seccomp.c @@ -38,6 +38,10 @@ #include /* offsetof(3), */ #include /* uint*_t, UINT*_MAX, */ #include /* assert(3), */ +#ifdef __ANDROID__ +#include /* TCSETS, TCGETS2, */ +#include /* _IOW, */ +#endif #include "syscall/seccomp.h" #include "tracee/tracee.h" @@ -121,13 +125,79 @@ static int add_trace_syscall(struct sock_fprog *program, word_t syscall, int fla return 0; } +#ifdef __ANDROID__ +/* The only ioctl(2) requests PRoot rewrites (see PR_ioctl in enter.c + * and exit.c). Tracing every ioctl would stop the tracee on each GPU + * command submission, for instance. */ +static const uint32_t traced_ioctls[] = { + TCSETS + 2 /* + TCSAFLUSH, see enter.c */, + TCGETS2, + TCSETS2, + TCSETSW2, + TCSETSF2, + _IOW(0x94, 9, int) /* FICLONE */, +}; +#define NB_TRACED_IOCTLS (sizeof(traced_ioctls) / sizeof(traced_ioctls[0])) +#define LENGTH_TRACE_IOCTL (NB_TRACED_IOCTLS + 4) + +/** + * Like add_trace_syscall(), but for ioctl(2) only notify PRoot about + * the requests in traced_ioctls. This function returns -errno if an + * error occurred, otherwise 0. + */ +static int add_trace_ioctl(struct sock_fprog *program, word_t syscall, int flag) +{ + /* The request is an unsigned int in the kernel: compare the low + * half of the argument, which comes first on little-endian ABIs. */ + const size_t request_offset = offsetof(struct seccomp_data, args[1]); + struct sock_filter statements[LENGTH_TRACE_IOCTL]; + size_t nb_statements = 0; + size_t i; + + if (syscall > UINT32_MAX) + return -ERANGE; + + /* Not ioctl: skip this block. */ + statements[nb_statements++] = (struct sock_filter) + BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, syscall, 0, LENGTH_TRACE_IOCTL - 1); + + statements[nb_statements++] = (struct sock_filter) + BPF_STMT(BPF_LD + BPF_W + BPF_ABS, request_offset); + + /* Handled request: jump to the final "notify" statement. */ + for (i = 0; i < NB_TRACED_IOCTLS; i++) + statements[nb_statements++] = (struct sock_filter) + BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, traced_ioctls[i], NB_TRACED_IOCTLS - i, 0); + + statements[nb_statements++] = (struct sock_filter) BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ALLOW); + statements[nb_statements++] = (struct sock_filter) BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_TRACE + flag); + + DEBUG_FILTER("FILTER: trace if syscall == %ld and request is handled\n", syscall); + + return add_statements(program, nb_statements, statements); +} +#endif + +/** + * Number of statements add_trace_syscall() (or add_trace_ioctl()) + * appends for @sysnum. + */ +static size_t trace_length(Sysnum sysnum) +{ +#ifdef __ANDROID__ + if (sysnum == PR_ioctl) + return LENGTH_TRACE_IOCTL; +#endif + return LENGTH_TRACE_SYSCALL; +} + /** * Append to @program->filter the statements that allow anything (if - * unfiltered). Note that @nb_traced_syscalls is used to make a - * sanity check. This function returns -errno if an error occurred, - * otherwise 0. + * unfiltered). Note that @traced_length (the number of statements + * added for the traced syscalls) is used to make a sanity check. + * This function returns -errno if an error occurred, otherwise 0. */ -static int end_arch_section(struct sock_fprog *program, size_t nb_traced_syscalls) +static int end_arch_section(struct sock_fprog *program, size_t traced_length) { int status; @@ -144,7 +214,7 @@ static int end_arch_section(struct sock_fprog *program, size_t nb_traced_syscall /* Sanity check, see start_arch_section(). */ if ( talloc_array_length(program->filter) - program->len - != LENGTH_END_SECTION + nb_traced_syscalls * LENGTH_TRACE_SYSCALL) + != LENGTH_END_SECTION + traced_length) return -ERANGE; return 0; @@ -152,16 +222,15 @@ static int end_arch_section(struct sock_fprog *program, size_t nb_traced_syscall /** * Append to @program->filter the statements that check the current - * @architecture. Note that @nb_traced_syscalls is used to make a - * sanity check. This function returns -errno if an error occurred, - * otherwise 0. + * @architecture. Note that @traced_length (the number of statements + * added for the traced syscalls) is used to make a sanity check. + * This function returns -errno if an error occurred, otherwise 0. */ -static int start_arch_section(struct sock_fprog *program, uint32_t arch, size_t nb_traced_syscalls) +static int start_arch_section(struct sock_fprog *program, uint32_t arch, size_t traced_length) { const size_t arch_offset = offsetof(struct seccomp_data, arch); const size_t syscall_offset = offsetof(struct seccomp_data, nr); - const size_t section_length = LENGTH_END_SECTION + - nb_traced_syscalls * LENGTH_TRACE_SYSCALL; + const size_t section_length = LENGTH_END_SECTION + traced_length; int status; /* Sanity checks. */ @@ -191,7 +260,7 @@ static int start_arch_section(struct sock_fprog *program, uint32_t arch, size_t }; DEBUG_FILTER("FILTER: if arch == %ld, up to %zdth statement\n", - arch, nb_traced_syscalls); + arch, traced_length); status = add_statements(program, LENGTH_START_SECTION, statements); if (status < 0) @@ -256,7 +325,7 @@ static int set_seccomp_filters(const FilteredSysnum *sysnums) size_t nb_archs = sizeof(seccomp_archs) / sizeof(SeccompArch); struct sock_fprog program = { .len = 0, .filter = NULL }; - size_t nb_traced_syscalls; + size_t traced_length; size_t i, j, k; int status; @@ -268,19 +337,19 @@ static int set_seccomp_filters(const FilteredSysnum *sysnums) for (i = 0; i < nb_archs; i++) { word_t syscall; - nb_traced_syscalls = 0; + traced_length = 0; - /* Pre-compute the number of traced syscalls for this architecture. */ + /* Pre-compute the length of the traced syscalls for this architecture. */ for (j = 0; j < seccomp_archs[i].nb_abis; j++) { for (k = 0; sysnums[k].value != PR_void; k++) { syscall = detranslate_sysnum(seccomp_archs[i].abis[j], sysnums[k].value); if (syscall != SYSCALL_AVOIDER) - nb_traced_syscalls++; + traced_length += trace_length(sysnums[k].value); } } /* Filter: if handled architecture */ - status = start_arch_section(&program, seccomp_archs[i].value, nb_traced_syscalls); + status = start_arch_section(&program, seccomp_archs[i].value, traced_length); if (status < 0) goto end; @@ -292,14 +361,19 @@ static int set_seccomp_filters(const FilteredSysnum *sysnums) continue; /* Filter: trace if handled syscall */ - status = add_trace_syscall(&program, syscall, sysnums[k].flags); +#ifdef __ANDROID__ + if (sysnums[k].value == PR_ioctl) + status = add_trace_ioctl(&program, syscall, sysnums[k].flags); + else +#endif + status = add_trace_syscall(&program, syscall, sysnums[k].flags); if (status < 0) goto end; } } /* Filter: allow untraced syscalls for this architecture */ - status = end_arch_section(&program, nb_traced_syscalls); + status = end_arch_section(&program, traced_length); if (status < 0) goto end; } diff --git a/patches/build-proot-android/config b/patches/build-proot-android/config index 5163407..ef16a31 100644 --- a/patches/build-proot-android/config +++ b/patches/build-proot-android/config @@ -33,7 +33,7 @@ set-arch() { else SUBARCH='' fi - API=21 + API=23 INSTALL_ROOT="$BUILD_DIR/root-$ARCH/root" STATIC_ROOT="$BUILD_DIR/static-$ARCH/root" From f7e2056731f524037c5a4002da5442230fdd431a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 31 Oct 2026 17:36:39 +0000 Subject: [PATCH 2/2] chore: set version to v1.1.1 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cc96e00..2653583 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2348,7 +2348,7 @@ dependencies = [ [[package]] name = "localdesktop" -version = "1.1.0" +version = "1.1.1" dependencies = [ "android-sdkmanager-rs", "android_logger", diff --git a/Cargo.toml b/Cargo.toml index e088fa5..30ecfe9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "localdesktop" -version = "1.1.0" +version = "1.1.1" edition = "2021" build = "build.rs" default-run = "build_apk"