Skip to content

Fix zygote crash loop on 32-bit devices (#145) - #153

Merged
JingMatrix merged 1 commit into
masterfrom
fix-arm32-plt-hook-window
Aug 9, 2026
Merged

Fix zygote crash loop on 32-bit devices (#145)#153
JingMatrix merged 1 commit into
masterfrom
fix-arm32-plt-hook-window

Conversation

@JingMatrix

Copy link
Copy Markdown
Owner

Bump LSPlt to pick up the PatchPLTEntry fix.

While backing up a hook region, LSPlt left it unmapped between moving the original segment aside and mapping the writable copy in its place. That region holds libandroid_runtime.so's .got and .got.plt, and on arm32 that library is the process's only provider of __aeabi_memcpy, __aeabi_memmove and friends -- each a bare b <sym>@plt through its own GOT, since bionic keeps its copies hidden. Any call to them from anywhere in the process during the window faults.

On a 32-bit Android 10 device this killed zygote from inside our remote entry() call, the tracer restored registers and detached without the region ever being mapped back, and zygote then died again on its next __aeabi_memmove. Magisk restarted it and the whole thing repeated, leaving the device unusable.

Bump LSPlt to pick up the PatchPLTEntry fix.

While backing up a hook region, LSPlt left it unmapped between moving the
original segment aside and mapping the writable copy in its place. That region
holds libandroid_runtime.so's .got and .got.plt, and on arm32 that library is
the process's only provider of __aeabi_memcpy, __aeabi_memmove and friends --
each a bare `b <sym>@plt` through its own GOT, since bionic keeps its copies
hidden. Any call to them from anywhere in the process during the window faults.

On a 32-bit Android 10 device this killed zygote from inside our remote entry()
call, the tracer restored registers and detached without the region ever being
mapped back, and zygote then died again on its next __aeabi_memmove. Magisk
restarted it and the whole thing repeated, leaving the device unusable.
@nova2moon

nova2moon commented Aug 9, 2026

Copy link
Copy Markdown

took a while to find the artifact :) it works!!! vector/stack loads ok, in logs only "E/" are:

grep 'E/' verbose_2026-08-09T09\:37\:00.481.log
[ 2026-08-09T09:36:58.545     1000:   431:   431 E/SELinux         ] avc:  denied  { add } for interface=vendor.qti.hardware.wifi.keystore::IKeystoreExt sid=u:r:keystore:s0 pid=1501 scontext=u:r:keystore:s0 tcontext=u:object_r:hal_wifi_keystore_hwservice:s0 tclass=hwservice_manager permissive=0
[ 2026-08-09T09:37:00.437        0:  1807:  1807 E/VectorNativeDaemon ] resolve realpath for bin/dex2oat64 failed with 2: No such file or directory
[ 2026-08-09T09:37:00.498        0:  1807:  1807 E/SELinux         ] avc:  denied  { execute } for  scontext=u:r:untrusted_app:s0 tcontext=u:object_r:dex2oat_exec:s0 tclass=file permissive=0
[ 2026-08-09T09:37:00.499        0:  1807:  1807 E/SELinux         ] avc:  denied  { execute_no_trans } for  scontext=u:r:untrusted_app:s0 tcontext=u:object_r:dex2oat_exec:s0 tclass=file permissive=0
[ 2026-08-09T09:37:02.842     1000:  2359:  2359 E/VectorNative    ] XZ decompression failed with code 7

and many normal lines:

[ 2026-08-09T09:36:58.023        0:   705:   705 V/zygisk-core32   ] detaching irrelevant process 1506
[ 2026-08-09T09:36:58.029        0:   705:   705 V/zygisk-core32   ] parent 1 forked 1508
[ 2026-08-09T09:36:58.036        0:   705:   705 V/zygisk-core32   ] process 1507 executed program: /system/bin/mediaex
tractor
[ 2026-08-09T09:36:58.036        0:   705:   705 V/zygisk-core32   ] detaching irrelevant process 1507
[ 2026-08-09T09:36:58.036        0:   705:   705 V/zygisk-core32   ] parent 1 forked 1510
[ 2026-08-09T09:36:58.039        0:   705:   705 V/zygisk-core32   ] parent 1 forked 1511
[ 2026-08-09T09:36:58.050        0:   705:   705 V/zygisk-core32   ] new process 1511 discovered and attached
[ 2026-08-09T09:36:58.050        0:   705:   705 V/zygisk-core32   ] new process 1510 discovered and attached
[ 2026-08-09T09:36:58.050        0:   705:   705 V/zygisk-core32   ] new process 1508 discovered and attached
[ 2026-08-09T09:36:58.054        0:   705:   705 V/zygisk-core32   ] parent 1 forked 1512
[ 2026-08-09T09:36:58.056        0:   705:   705 V/zygisk-core32   ] process 1510 executed program: /system/bin/mediase
image

will keep using for a while.. Great work!!!

@JingMatrix
JingMatrix merged commit c1b5e42 into master Aug 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Injection crashes zygote on 32-bit Android 10 (SIGSEGV in libandroid_runtime.so)

2 participants