The Diagnostics screen rendered a raw key=value dump of
/data/adb/vpnhide_kmod/load_status + load_dmesg as a monospace blob,
asking users to "share this block" for bug reports. The same data is
already (a) parsed into proper Dashboard issue cards (wrong-variant
kmod, missing kretprobes, etc.) and (b) bundled into the Collect debug
log zip, so the on-screen dump was redundant and ugly.
- Drop KmodLoadTraceCard composable + its loader and state
- Drop diag_kmod_load_trace_{title,description} from EN+RU
- Repoint dashboard_issue_kmod_load_failed at "Collect debug log"
instead of the now-deleted trace section
- Edit changelog.json history[0] for v0.7.0 to drop the trace mention
and regenerate CHANGELOG.md + update-json/changelog.md
Zygisksu's get_module_dir() returns a raw fd to /data/adb/modules/<id>
that the module owns. Previously the fd was stored in a local RawFd
variable and leaked — every app forked from zygote after us inherited
it via normal fd inheritance.
Apps that scan /proc/self/fd for root-managed paths (Ozon anti-tamper,
likely others) detected a descriptor pointing inside /data/adb/ and
silently hung — even when our .so was dlclosed for non-target apps.
Wrap the raw fd in OwnedFd so Drop closes it at end of on_load, before
zygote forks any app process.
Bisect-verified on Pixel 4a with Magisk Kitsune 27001 + Zygisk Next
1.3.4 + Vector 2.0: Ozon 19.12.1 hung at loading spinner with any
vpnhide-zygisk build before this fix, loads to full catalog after.
KernelSU-Next and Magisk fetch the changelog URL and display it as text.
Pointing to the GitHub releases HTML page showed raw HTML tags.
Now points to a raw markdown file that renders correctly.