LoveSy
3ae7344747
Create /dev
on stub cpio
2022-06-22 04:05:50 -07:00
canyie
00247c7901
Fix meizu non-SAR 2SI compatibility again
...
Meizu devices using 2SI won't switch root to /system and still on rootfs, and /init is the 1st stage's, which cannot handle the 2nd stage. So we have to manually execute /system/bin/init for the 2nd stage.
2022-06-19 01:22:18 -07:00
topjohnwu
3c75f474c6
Embed version info in prop format
2022-06-19 00:43:38 -07:00
topjohnwu
db1f5b0397
Reduce files relying on flags.h
2022-06-19 00:43:38 -07:00
vvb2060
b9c93c66f6
Force app version not lower than daemon
2022-06-17 11:53:16 -07:00
topjohnwu
741b679306
Cleanup libbase
2022-06-17 02:36:04 -07:00
LoveSy
4e2ecdb920
Fix env overflow
...
Fix #5989
2022-06-17 02:02:44 -07:00
topjohnwu
9469e79e3c
Proper namespacing
...
The IDE will get confused when #include is in a namespace
2022-06-15 02:38:56 -07:00
topjohnwu
db78c20161
Add dtb test command
2022-06-15 02:26:50 -07:00
topjohnwu
1699da1754
Update help message and make behavior consistent
2022-06-14 21:19:17 -07:00
canyie
754e690274
Fix config backup for legacy SAR
2022-06-14 02:57:47 -07:00
vvb2060
42606efe56
Always remove task
2022-06-09 21:02:31 -07:00
vvb2060
cae58c8790
Update hijack bins
2022-06-08 23:30:22 -07:00
topjohnwu
3a39dd4049
Update ramdisk restore implementation
2022-06-08 23:23:39 -07:00
canyie
89ff3c6572
Don't backup ramdisk created by Magisk
...
Fix topjohnwu#5938, fix topjohnwu#5944
2022-06-08 04:53:43 -07:00
topjohnwu
7bf9c74216
Don't skip backup even if original does not exist
...
Close #5945 , fix #5944
2022-06-08 03:58:25 -07:00
vvb2060
569e9ad937
Use noHistory attribute for SuRequestActivity
2022-06-06 02:58:52 -07:00
vvb2060
9679874874
Disable repack on android 5.0
...
am does not support -p
2022-06-01 02:05:15 -07:00
topjohnwu
8186f253e8
Fix zygisk code unloading
2022-06-01 01:50:42 -07:00
topjohnwu
d4fe8632ec
Support SELinux disabled on debug builds
2022-05-31 22:24:13 -07:00
vvb2060
d7776f6597
Return empty on failure to get context
2022-05-31 18:35:56 -07:00
topjohnwu
e4094c0caa
Update build scripts
2022-05-30 03:47:31 -07:00
topjohnwu
2e51fe20a1
Move things to the correct location
2022-05-30 02:09:07 -07:00
topjohnwu
50e2f33d1c
More debug indication in UI
...
Close #5874
2022-05-30 01:53:07 -07:00
topjohnwu
5e6eb8dd01
Avoid non-blocking I/O
2022-05-30 01:21:38 -07:00
topjohnwu
bf2f823b8c
Prune unused UID at boot
2022-05-29 23:43:22 -07:00
topjohnwu
d0c4226997
Proper package state management
2022-05-29 23:31:57 -07:00
topjohnwu
4ea8bd0229
Fix incorrect use of compare_exchange
2022-05-29 22:19:56 -07:00
vvb2060
d19fcd5e21
Check path when start daemon
2022-05-29 09:08:05 -07:00
vvb2060
0b5f973b31
Print message when getting original app_process fails
2022-05-29 03:46:31 -07:00
topjohnwu
490a784993
Handle zygote restarts
2022-05-28 22:39:44 -07:00
topjohnwu
9c774f96db
Use exec for boot_complete
2022-05-28 16:53:04 -07:00
topjohnwu
8dfb30fefe
Skip cert check on debug builds
2022-05-24 05:39:16 -07:00
topjohnwu
2a252d13b8
Enforce dyn APK signature in stub app
2022-05-24 05:21:36 -07:00
topjohnwu
083ef803fe
Enforce package signature verification
2022-05-20 04:37:58 -07:00
topjohnwu
351f0269ae
Install stub if necessary
2022-05-19 22:54:49 -07:00
topjohnwu
a29ae15ff7
Proper get_manager implementation
2022-05-19 02:39:57 -07:00
topjohnwu
34dded3b25
Fix denylist on shared UID apps
2022-05-18 01:59:45 -07:00
topjohnwu
975b1a5e36
Prune unused UIDs from su policies
2022-05-18 01:55:58 -07:00
topjohnwu
c11ccbae2d
Extract vbmeta from footer
...
Do not scan manually, extract properly from footer like libavb
2022-05-13 02:49:18 -07:00
topjohnwu
985249c3d0
Support GKIs without ramdisk
...
Fix #5819
2022-05-12 03:04:55 -07:00
topjohnwu
622e09862a
Restructure native codebase
2022-05-12 02:03:51 -07:00
残页
7505599ea0
Skip invalid slot_suffix argument
...
Many Amlogic devices (e.g. FireTV 2nd gen Cube, Vero 4k+, MI Smart Speaker, etc.) are A-only with androidboot.slot_suffix=normal argument. I think "normal" actually means A-only in this case so just ignore it.
Fix topjohnwu#5806
2022-05-12 00:37:22 -07:00
topjohnwu
575c417403
More detailed comments and documentation
2022-05-11 21:12:37 -07:00
topjohnwu
9f7a3db8be
Move cert extraction to its own file
2022-05-11 21:12:37 -07:00
topjohnwu
029422679c
Remove enforcement
...
Enforcement will be re-implemented later
2022-05-11 21:12:37 -07:00
vvb2060
05d6d2b51b
Verify app signature
2022-05-11 21:12:37 -07:00
topjohnwu
24603b3cef
Update Android Studio
2022-05-09 20:53:47 -07:00
topjohnwu
90545057e9
Always initialize module_list
...
Close #5712
2022-05-06 01:40:19 -07:00
canyie
4f1a1879e5
Misc QoL changes
...
- su: Preserve correct capacity to avoid vector reallocation
- su: Properly format code
- daemon: Remove useless `if`
- docs: Remove outdated info
2022-05-06 01:01:58 -07:00
topjohnwu
134508193d
Mock selinuxfs load with regular file
...
The hijacked load node does not need to be a FIFO. A FIFO is only
required for blocking init's control flow, which is already achieved
by hijacking the enforce node.
2022-04-16 07:28:20 -07:00
topjohnwu
3358eab991
Switch to use ONDK
2022-04-15 12:20:18 -07:00
vvb2060
f97866a961
Close stub fd
2022-04-13 23:19:14 -07:00
vvb2060
e1987c42c4
Cleanup SELinux mock files
2022-04-13 23:18:55 -07:00
canyie
18566715e1
Fix MAGISKTMP unmount for CLI
2022-04-10 01:44:16 -07:00
topjohnwu
63a89d9f04
Fix init dmesg logs
2022-04-08 02:38:30 -07:00
canyie
b4099fc5f9
Support sepolicy.unlocked
...
Fix topjohnwu#4914
2022-04-08 02:24:20 -07:00
topjohnwu
ff2513e276
Use LD_PRELOAD to intercept sepolicy on 2SI init
2022-04-08 02:13:31 -07:00
topjohnwu
f24d52436b
Deduplicate logic
2022-04-08 00:20:21 -07:00
vvb2060
9de6e8846b
Dump stub app to MAGISKTMP/stub.apk
2022-04-07 23:20:42 -07:00
vvb2060
01a1213463
/data/adb/magisk/magisk.apk no longer exists
2022-04-07 23:20:42 -07:00
canyie
448384af06
Guard su request IPC
...
Previously `read_string()` calls `std::string.resize()` with a int read from remote process. When I/O error occurs, -1 will be used for resizing the string, `std::bad_alloc` is thrown and since magisk is compiled with `-fno-exceptions`, it will crash the whole daemon process.
May fix topjohnwu#5681
2022-04-06 21:15:07 -07:00
canyie
3f840f53a0
Check device tree fstab entries are compatible
...
Fix topjohnwu#5664
2022-04-02 04:28:30 -07:00
topjohnwu
704f91545e
Reorganize magiskpolicy source code
2022-03-29 22:26:38 -07:00
topjohnwu
efb3239cbd
Drop package_name column
2022-03-28 02:05:09 -07:00
topjohnwu
7e7ddeb9e2
Cleanup database migration code
2022-03-28 00:59:16 -07:00
LoveSy
9e8218089b
Only dlopen valid fd
2022-03-26 13:48:53 -07:00
topjohnwu
9f1740cc4f
Add preliminary shared UID app support
2022-03-25 13:08:13 -07:00
topjohnwu
b1faa5eed4
Update BusyBox
...
Close #5620
2022-03-22 04:18:12 -07:00
LoveSy
7f1f0b9048
Proper support multiple modules adding same dir
2022-03-21 15:53:49 -07:00
LoveSy
183e5f2ecc
Fix xhook cannot hook app_process
...
Co-authored-by: canyie <31466456+canyie@users.noreply.github.com>
Co-authored-by: John Wu <topjohnwu@gmail.com>
2022-03-21 15:52:38 -07:00
topjohnwu
3dc7d77ea9
Patch monolithic sepolicy only if not treble
2022-03-19 20:21:31 -07:00
残页
0f07bbb3e5
Device using split policy can still have monolithic sepolicy file
2022-03-19 12:37:48 -07:00
LoveSy
dd5a3416bf
Fix multiple modules adding the same subdirectory
2022-03-19 12:28:54 -07:00
LoveSy
2fb49ad780
Don't always mock selinux enforce as "0"
2022-03-19 12:28:32 -07:00
topjohnwu
876132694d
Make /dev always writable
2022-03-18 04:58:37 -07:00
topjohnwu
753808a4ce
Also hijack plat_file_contexts if necessary
...
Since Android 13, sepolicy are also loaded from APEX modules. Part
of the change is to run restorecon before SELinux is set to enforce.
In order to support this situation, we also hijack plat_file_contexts
if necessary to properly order our operations.
Original idea credits to @yujincheng08, close #5603
2022-03-18 00:46:34 -07:00
topjohnwu
32cd694ad5
SAR can also have monolithic sepolicy
2022-03-17 22:32:49 -07:00
topjohnwu
f008420891
Make magiskinit not magiskpolicy
2022-03-17 03:36:40 -07:00
topjohnwu
fa8900be65
Use standalone magiskpolicy
2022-03-17 03:15:39 -07:00
LoveSy
69c2f407d6
Log if failed to dlopen a zygisk module
2022-03-17 02:25:31 -07:00
topjohnwu
8dbf93750f
Reorganize magiskinit code
2022-03-16 21:41:20 -07:00
topjohnwu
e266a81167
Remove unused code
2022-03-16 21:31:22 -07:00
topjohnwu
e841aab9e7
Add hijack sepolicy support for rootfs devices
...
On older Android versions, pre-mounting selinuxfs will lead to errors,
so we have to use a different method to block init's control flow.
Since all devices that falls in this catagory must both:
1. Be Android 8.0 - 9.0
2. Have early mount fstab in its device tree
We can actually use the same FIFO trick, but this time not on selinuxfs,
but on the read-only device tree nodes in sysfs or procfs. By mocking
the fstab/compatible node in the device tree, we can block init when
it attempts to do early mount; at that point, we can then mock selinuxfs
as we normally would, successfully hijack and inject patched sepolicy.
2022-03-16 20:01:28 -07:00
topjohnwu
49f259065d
Introduce new sepolicy injection mechanism
...
In the current implementation, Magisk will either have to recreate
all early mount implementation (for legacy SAR and rootfs devices) or
delegate early mount to first stage init (for 2SI devices) to access
required partitions for loading sepolicy. It then has to recreate the
split sepolicy loading implementation in-house, apply patches, then
dump the compiled + patched policies into monolithic format somewhere.
Finally, it patches the original init to force it to load the sepolicy
file we just created.
With the increasing complexity involved in early mount and split
sepolicy (there is even APEX module involved in the future!),
it is about time to rethink Magisk's sepolicy strategy as rebuilding
init's functionality is not scalable and easy to maintain.
In this commit, instead of building sepolicy ourselves, we mock
selinuxfs with FIFO files connected to a pre-init daemon, waiting
for the actual init process to directly write the sepolicy file into
MagiskInit. We then patch the file and load it into the kernel. Some
FIFO tricks has to be used to hijack the original init process's
control flow and prevent race conditions, details are directly in the
comments in code.
At the moment, only system-as-root (read-only root) support is added.
Support for legacy rootfs devices will come with a follow up commit.
2022-03-16 00:31:55 -07:00
topjohnwu
b10379e700
Cleanup inheritance
2022-03-14 04:22:09 -07:00
topjohnwu
810d27a618
Use /data as tmpfs mount point in 2SI setup
...
Design credit to @yujincheng08
Close #5146 . Fix #5491 , fix #3752
Previously, Magisk changes the mount point from /system to /system_root
by patching fstab to prevent the original init from changing root.
The reason why we want to prevent the original init from switching the
root directory is because it will then be read-only, making patching
and injecting magiskinit into the boot chain difficult.
This commit (ab)uses the fact that the /data folder will never be part
of early mount (because it is handled very late in the boot by vold),
so that we can use it as the mount point of tmpfs to store files.
Some advantages of this method:
- No need to switch root manually
- No need to modify fstab, which significantly improves compatibility
e.g. avoid hacks for weird devices like those using oplus.fstab,
and avoid hacking init to bypass fstab in device trees
- Supports skip_mount.cfg
- Support DSU
2022-03-13 05:06:08 -07:00
topjohnwu
9b60c005c7
Support multiple CPIO concatenated
2022-03-13 04:23:00 -07:00
topjohnwu
563a587882
Initialize local variables
...
Fix #5542
2022-03-09 20:43:42 -08:00
topjohnwu
0c681cdab4
Check null before dereferencing fds_to_ignore
2022-03-03 21:34:53 -08:00
topjohnwu
80dd37ee31
Add missing specialize arguments
2022-03-02 22:01:35 -08:00
topjohnwu
e0b5645064
Revert "Directly use getrandom system call if possible"
...
This reverts commit e7c82f20e3d7d7b47221b454508d07aefc14e7c0.
Fix #5516
2022-03-02 19:50:47 -08:00
topjohnwu
548d70f30c
Mount with original option
...
Fix #5481 , close #5486
2022-03-01 20:09:59 -08:00
topjohnwu
9968af0785
Move all permission check into daemon.cpp
2022-03-01 03:15:38 -08:00
topjohnwu
be7586137c
Reduce C++ wizardry
2022-03-01 03:15:38 -08:00
LoveSy
7999b66c3c
Refactor daemon connection
2022-03-01 03:15:38 -08:00
vvb2060
c82a46c1ee
Check property before switch mem cgroup
2022-02-28 23:27:23 -08:00
vvb2060
666ab1941f
Fix app request fifo wait
2022-02-28 23:26:59 -08:00
topjohnwu
e7c82f20e3
Directly use getrandom system call if possible
2022-02-16 23:57:28 -08:00
LoveSy
afa771a980
Set dlopen reserved size to unlimited
2022-02-16 23:05:17 -08:00
topjohnwu
4c80808997
Check packages.xml inode to trigger app rescan
2022-02-14 02:57:33 -08:00
topjohnwu
d021bca6ef
Prevent app_process from setting umask
...
Fix #5435
2022-02-11 01:26:24 -08:00
topjohnwu
55ed6109c1
Use dynamic_bitset.emplace_back()
2022-02-11 01:10:26 -08:00
LoveSy
88e8f2bf83
Proper escape :
and \
when binding intent
2022-02-11 01:07:28 -08:00
topjohnwu
605eae21bc
Remove unnecessary read/write
...
Close #5425
2022-02-11 00:24:12 -08:00
topjohnwu
93eb277a88
Update error messages
2022-02-11 00:01:51 -08:00
LoveSy
8edf556c9e
Fix lz4_lg compress
2022-02-10 23:50:19 -08:00
topjohnwu
7fcb63230f
Support lz4_legacy archive with multiple magic
...
Multiple lz4_legacy archives can be directly concatenated
2022-02-10 23:49:17 -08:00
canyie
ebb0ec6c42
Make xmmap() returns nullptr when fails
...
In the constructor of mmap_data, there are two possible values when fails: nullptr if fstat() fails, and MAP_FAILED if mmap() fails, but mmap_data treated MAP_FAILED as valid address and crashes.
2022-02-08 00:49:47 -08:00
LoveSy
188546515c
Fix UID tracking
2022-02-08 00:49:22 -08:00
topjohnwu
c8990b0f68
Rewrite UID tracking
2022-02-07 02:46:47 -08:00
topjohnwu
3145e67feb
Update data structure
2022-02-07 00:17:07 -08:00
topjohnwu
a7392ed3d7
Fix MULTIUSER_MODE_OWNER_MANAGED
2022-02-06 06:46:09 -08:00
topjohnwu
a4f97fa151
Fix buffer overflow in connect.cpp
2022-02-06 05:52:11 -08:00
LoveSy
ff7ac582f0
Refactor Zygisk loading
...
Co-authored-by: topjohnwu <topjohnwu@gmail.com>
2022-02-06 00:27:31 -08:00
LoveSy
d2c2456fbe
Don't use getmntent_r
from system's libc
...
Fix #5354
Co-authored-by: topjohnwu <topjohnwu@gmail.com>
2022-02-04 23:19:12 -08:00
LoveSy
e9f562a8b7
Fix abuse of fdopendir
...
After `fdopendir`, the fd is no longer usable. Should dup and
make use of RAII
Co-authored-by: 残页 <31466456+canyie@users.noreply.github.com>
2022-02-04 22:54:34 -08:00
残页
79620c97d1
Invalidate Samsung's persist.sys.zygote.early
...
Samsung FDE devices with the "persist.sys.zygote.early=true" property will cause Zygote to start before post-fs-data. According to Magisk's document, the post-fs-data phase should always happen before Zygote is started. Features assuming this behavior (like Zygisk and modules that need to control zygote) will not work. To avoid breaking existing modules, we simply invalidate this property to prevent this non-standard behavior from happening
Fix #5299 , fix #5328 , fix #5308
Co-authored-by: LoveSy <shana@zju.edu.cn>
2022-02-03 00:46:52 -08:00
topjohnwu
7f65f7d3ca
Separate libc.a hacks into its own component
2022-01-31 02:09:08 -08:00
topjohnwu
9fa096c6f4
Add runtime FORTIFY support
...
Gingerbread libc.a missing symbols
2022-01-31 01:49:37 -08:00
LoveSy
70415a396a
Do not filter uid == 1000 for process info
2022-01-30 08:25:24 -08:00
topjohnwu
3bf47a6838
Update selinux
2022-01-30 08:18:04 -08:00
topjohnwu
d3d28f0623
Update to NDK r23b
...
Credits: @yujincheng08
Close #5193
2022-01-30 07:11:51 -08:00
topjohnwu
06531f6d06
Add annotations to suppress warnings
2022-01-25 04:16:14 -08:00
topjohnwu
2b303a7e23
Add a missing busybox patch back
...
Hopefully, fix #4174
2022-01-25 03:37:59 -08:00
topjohnwu
45483fde74
Update CLI usages
2022-01-25 02:04:15 -08:00
topjohnwu
2fe3082518
Update busybox
2022-01-24 23:20:36 -08:00
topjohnwu
5a889d28c8
Pick a more reasonable zopfli config
...
Close #4980
2022-01-24 23:07:49 -08:00
topjohnwu
c6dcff0ae7
Minor dynamic_bitset changes
2022-01-24 22:30:19 -08:00
LoveSy
02dd962601
Don't load zygisk module for magisk app
2022-01-24 03:05:12 -08:00
topjohnwu
cbe97cdfde
Fix dynamic_bitset implementation
2022-01-23 04:39:00 -08:00
topjohnwu
407dfc7547
Always write 0 to fd
2022-01-23 04:19:07 -08:00
topjohnwu
fbe17dde03
Add flag for unloaded Zygisk modules
2022-01-21 05:37:47 -08:00
John Wu
c826318da4
Update CLI usage text
2022-01-20 01:59:01 -08:00
LoveSy
6582a4abd9
Make magiskpolicy supports multiple --apply
2022-01-20 01:59:01 -08:00
topjohnwu
195d885887
Reduce log spamming
2022-01-20 00:18:46 -08:00
topjohnwu
519bd2f30f
Disable AVD hacks by default
2022-01-19 20:28:01 -08:00
topjohnwu
20ef724fad
Add new build command avd_patch
2022-01-19 05:12:11 -08:00
vvb2060
f443cbaa2b
Revert "Always run non disabled module post-fs-data scripts"
...
This reverts commit 4dfb193d10f24fbc96a88c1d13821f471621ba81.
2022-01-18 04:48:47 -08:00
topjohnwu
bb7a74e4b4
Add Zygisk API getFlags()
2022-01-17 19:54:33 -08:00
topjohnwu
76ddfeb93a
Allow modifying denylist without enforcement
2022-01-15 23:46:22 -08:00
LoveSy
c38b826abf
Skip overlayfs for post-fs-data mount
...
adb remount will introduce overlayfs for /system and /vendor, we should
skip mounting as overlayfs. This also helps us support overlayfs Magisk
later.
2022-01-14 03:42:37 -08:00
topjohnwu
21d7db0959
Add new Zygisk API to get module dir
2022-01-14 03:10:02 -08:00
LoveSy
b2cd24ed1b
Fix an UB when cil compile error
2022-01-11 03:01:27 -08:00
topjohnwu
f4926cb822
Small refactoring
2022-01-02 16:09:03 -08:00
topjohnwu
1e77e0862a
Separate fstab finding to its own function
2022-01-02 15:49:12 -08:00
topjohnwu
8c696cb8ca
Minor code refactoring
2021-12-28 23:37:06 -08:00
LoveSy
62ef8ade8f
Skip loading Magisk when detecting DSU
...
Fix #4402
Co-authored-by: topjohnwu <topjohnwu@gmail.com>
2021-12-28 21:04:09 -08:00
LoveSy
3d88dd3123
Update dtc to fix a UB
...
See https://github.com/dgibson/dtc/pull/65
2021-12-28 17:18:32 -08:00
残页
880b348ce6
Add an old cgroup path
...
Fix topjohnwu#5125
cgroup root path might be mem cgroup instead of acct, especially on low-ram devices.
bc131c3244
%5E%21/#F0
2021-12-28 17:12:15 -08:00
LoveSy
19182ffddf
If dt fstab contains error, fallback to default fstab
...
See https://cs.android.com/android/platform/superproject/+/master:system/core/init/first_stage_mount.cpp;drc=master;l=155
From the source of `FirstStageMount`, dt fstab can fail gracefully and
if any error occurs it will fall back to default fstab. Magisk now
replaces the default fstab and dt fstab unconditionally, bringing potential
errors to the default fstab and causing init fails to load partitions.
2021-12-28 17:10:52 -08:00
topjohnwu
f4ed6274a4
Invert vbmeta header patching config
...
vbmeta header should not be patched in most cases
2021-12-14 04:52:25 -08:00
LoveSy
56eb1a1cf9
Load fstab from system/etc
...
Caused by this commit: e98afa2687
Fix #5057
2021-12-14 03:51:55 -08:00
LoveSy
a7c156a9e3
Further fix oplus.fstab
support
...
* Further fix `oplus.fstab` support
In some oneplus devices, `oplus.fstab` does exists but `init` never
loaded it and those entries in `oplus.fstab` are written directly to
`fstab.qcom`. Previous implementation will introduce duplicate entries
to `fstab.qcom` and brick the device. This commit filters those entries
from `oplus.fstab` that are already in `fstab.qcom` and further filters
duplicated entries in `oplus.fstab` (keep only the last entry).
Fix #5016
* Fix UB
Since we moved entry, we need to explicitly copy its member.
For c++23 we can use `auto{}`.
2021-12-14 03:40:23 -08:00
残页
b5d80a88d1
Only care about mount namespace isolating
2021-12-14 03:08:55 -08:00
LoveSy
87c2f6ad14
xhook_clear after xhook_refresh
2021-12-14 03:06:57 -08:00
topjohnwu
e097c097fe
Rename persist_properties.cpp -> persist.cpp
2021-11-30 01:58:31 -08:00
topjohnwu
1443a5b175
Use mmap_data more widely
2021-11-30 01:50:55 -08:00
topjohnwu
2d82ad93dd
Macro -> template
2021-11-29 19:56:37 -08:00
topjohnwu
0a28dfe1e2
AVB blobs expect to be 4096-byte aligned
2021-11-28 13:21:05 -08:00
topjohnwu
228570640e
Introduce KEEPVBMETAFLAG env variable
...
Close #4447 , close #4906 , close #4901 , close #4964
2021-11-23 22:14:12 -08:00
topjohnwu
65a79610aa
Fix crash and warnings
2021-11-23 18:46:06 -08:00
topjohnwu
24984ea4f2
Optimize stream for full-file writes
2021-11-23 18:08:14 -08:00
topjohnwu
048b2af0fc
Improve zopfli encoder
...
Write in chunks for CLI compression
2021-11-23 16:50:08 -08:00
topjohnwu
449989ddd9
Always use zopfli for zImage compression
2021-11-23 14:24:05 -08:00
topjohnwu
01ebe5724a
Cleanup zImage parsing code
2021-11-23 13:39:15 -08:00
topjohnwu
95fb230b8c
Update to BusyBox 1.34.1
2021-11-22 19:46:52 -08:00
topjohnwu
632971af15
Properly support v4 image headers
2021-11-21 06:07:21 -08:00
topjohnwu
5787aa1078
Stream should always write all bytes
2021-11-21 06:05:59 -08:00
topjohnwu
d8b9265484
Pull out buffer-chunk logic into separate class
2021-11-21 06:05:55 -08:00
topjohnwu
9ea3169ca9
Do not allow modifying page sizes
2021-11-20 22:51:22 -08:00
topjohnwu
aebf2672cd
Fix unpacking vendor boot images
2021-11-20 22:44:38 -08:00
topjohnwu
fef44bd24f
Allow boot scripts to know Zygisk status
2021-11-20 13:05:15 -08:00
topjohnwu
4dfb193d10
Always run non disabled module post-fs-data scripts
2021-11-16 21:29:13 -08:00
vvb2060
d4ac458d17
Ignore zygisk modules when zygisk is not enabled
2021-11-16 21:14:35 -08:00
topjohnwu
e1b63d7dec
Initialize mt19937 statically in function
...
This reduces startup time
2021-11-16 03:20:07 -08:00
topjohnwu
4b5651bd6f
Revert logging after pre specialize
2021-11-16 03:12:01 -08:00
topjohnwu
50515d9128
Close unclosed fds from modules
2021-11-16 01:59:45 -08:00
topjohnwu
6935033db5
Prevent dangling pointers
2021-11-12 02:02:05 -08:00
topjohnwu
421277d730
Prevent race conditions in connect_companion
2021-11-12 01:55:55 -08:00
topjohnwu
56988944b5
No need to dup fd
2021-11-12 01:54:48 -08:00
topjohnwu
528601d25a
Fix integer overflow and workaround seccomp
...
- Use ftruncate64 instead of ftruncate to workaround seccomp
- Cast uint32_t to off64_t before making it negative
Note: Using ftruncate with a modern NDK libc should actually be
fine as the syscall wrapper in bionic will use ftruncate64 internally.
However, since we are using the libc.a from r10e built for Gingerbread,
seccomp wasn't a thing back then, and also the ftruncate64 symbol is
missing; we have to create our own wrapper and call it instead on
32-bit ABIs.
Props to @jnotuo for discovering the overflow bug and seccomp issue
Fix #3703 , close #4915
2021-11-10 03:07:20 -08:00
topjohnwu
b8c1588284
Always unload zygisk after specialize
2021-11-07 13:05:44 -08:00
Chaosmaster
16322ab30c
Use full gzip-signature to find gzip-data.
...
Fall back to raw image if gzip is not found.
Fixes #4849
2021-11-03 22:23:21 -07:00
Chaosmaster
5682917356
Speed up zopfli compression
...
See #4810 for example
2021-11-03 22:22:29 -07:00
LoveSy
c91ccc8b4e
Fix UB on dtb
...
`operator==` of string_view will create a tmp `string_view`.
It's an UB if the `const char *` is a nullptr.
`fdt_get_name` however will return a nullptr.
2021-11-03 22:21:48 -07:00
topjohnwu
63f670fc36
Move first stage unload before fork
2021-11-02 21:53:33 -07:00
LoveSy
e20b07fa24
Fix #4853
2021-11-02 19:31:17 -07:00
topjohnwu
d232cba02d
Fix first stage unload
2021-11-02 04:12:56 -07:00
topjohnwu
48df6b8485
Use memmem instead of strstr
...
It might not be null terminated
2021-10-31 11:46:56 -07:00
Nullptr
e34e04af04
Make Api functions inline
...
Make Api functions inline to avoid duplicate symbols when including api.hpp in multiple cpps
2021-10-31 10:55:41 -07:00
topjohnwu
84e19ceef0
Tidy up bootimg.h
...
Close #4796
2021-10-31 10:52:12 -07:00
Chris Renshaw
59161efd08
Support Samsung 2SI with skip_initramfs in dtb cmdline
...
Samsung Galaxy A21S and Galaxy M12, probably others, are hdr_v2 boot.img with 2SI judging by the ramdisk contents, but the dtb contains an extra cmdline with skip_initramfs present, even though this shouldn't exist on 2SI and the kernel apparently doesn't even contain a skip_initramfs function
I can't find examples of other devices where skip_initramfs is present in the dtb other than these so patch it out like we do the kernel
Co-authored-by: topjohnwu <topjohnwu@gmail.com>
2021-10-30 21:20:10 -07:00
Chris Renshaw
6663fd3526
Support custom legacy Sony devices with init.real setup
...
Custom ROM bring-ups of legacy Sony devices contain the following:
/init (symlink to /bin/init_sony)
/init.real (the "real" Android init)
/bin/init_sony (this was /sbin/init_sony on Android <11)
Kernel loads the ramdisk and starts /init -> /bin/init_sony
/bin/init_sony does low-level device setup (see: https://github.com/LineageOS/android_device_sony_common/blob/lineage-18.1/init/init_main.cpp )
/bin/init_sony unlinks /init and renames /init.real to /init
/bin/init_sony starts /init
Since init_sony needs to run first magiskinit needs to replace init.real instead, so add workarounds based on detection of init.real to boot patcher and uninstaller
Thanks @115ek and @bleckdeth
Fixes #3636
Co-authored-by: topjohnwu <topjohnwu@gmail.com>
2021-10-30 18:59:20 -07:00
topjohnwu
2c44e1bb93
Update rules again
2021-10-29 03:37:14 -07:00
残页
e3f6399473
Don't use xwrite() when patching legacy rootfs init
...
Fix topjohnwu#4810
> [ 2.927463] [1: init: 1] magiskinit: Replace [/system/etc/selinux/plat_sepolicy.cil] -> [xxx]
[ 2.936801] [1: init: 1] magiskinit: write failed with 14: Bad address
Since topjohnwu#4596, magisk fails to patch `/init`, xwrite() fails with EFAULT, break the original `/init` file and make the device unbootable. Reverting this commit for legacy rootfs devices fixes the problem. I think this is a Samsung kernel magic since currently I can't reproduce this on other devices or find something special in the log currently we have.
2021-10-29 03:23:34 -07:00
残页
89c2c21774
Fix init.rc path detection
...
Fix #4319
Some devices store init.rc into the new path but still have the legacy /init.rc file
2021-10-29 03:21:20 -07:00
残页
a170acb9d7
Fix compilation when init debug toggle enabled
2021-10-29 03:15:16 -07:00
vvb2060
6a086bb222
Load *_compat_cil_file from system_ext
...
https://android-review.googlesource.com/c/platform/system/core/+/1650271
2021-10-29 03:14:26 -07:00
vvb2060
b2f152e641
realpath /proc/pid/cwd
...
prevent cross mount namespace
2021-10-29 03:13:20 -07:00
topjohnwu
6c5b261804
Update spolicy rules
2021-10-29 03:12:48 -07:00
topjohnwu
8bd0c44e83
Replace module fd with memfd if possible
2021-10-28 00:26:18 -07:00
topjohnwu
34c36984e9
Stop extreme verbose logging
2021-10-27 04:00:40 -07:00
topjohnwu
8bd6aca0dd
DenyList unmount without magiskd
2021-10-27 04:00:40 -07:00
topjohnwu
983b74be77
Pass MAGISKTMP over to zygote
2021-10-27 03:25:54 -07:00
topjohnwu
ea75a09f95
Make zygisk survive zygote restarts
...
Close #4777
2021-10-27 01:53:16 -07:00
LoveSy
4c747c4148
Add rule: allow * magisk_file lnk_file { * }
2021-10-26 00:41:04 -07:00
LoveSy
49abfcafed
Fix nullptr dereference when env abnormal
2021-10-26 00:40:00 -07:00
topjohnwu
50710c72ad
Cleanup magiskinit code
2021-10-26 00:35:55 -07:00
vvb2060
2e299b3814
Add an old cgroup v2 path
...
https://android-review.googlesource.com/c/platform/system/core/+/1324649
2021-10-25 20:54:19 -07:00
vvb2060
3599384b38
Allow fallback to /dev/pts
2021-10-23 23:31:44 -07:00
topjohnwu
4b307cad2c
Random minor changes
2021-10-23 22:20:07 -07:00
topjohnwu
7496d51580
Make zygiskd ABI aware
2021-10-23 14:38:30 -07:00
topjohnwu
4194ac894c
Support setting more options
2021-10-21 03:20:04 -07:00
topjohnwu
ffb5d9ea9c
Update libcxx
2021-10-21 02:08:13 -07:00
topjohnwu
770b28ca30
Build on API 21 headers
2021-10-20 03:17:42 -07:00
topjohnwu
8d0dc37ec0
Use SO_PEERSEC to get client secontext
2021-10-19 23:46:38 -07:00
topjohnwu
fe41df87bb
pthread_cond_signal might wake multiple threads
...
Close #4759
2021-10-19 21:32:37 -07:00
topjohnwu
8276a0775d
Fix API doc
2021-10-17 05:42:33 -07:00
LoveSy
abfb3bb3bb
Fix always log hook fails
2021-10-17 05:00:31 -07:00
LoveSy
e184eb4a23
Fix UB of loading modules
...
- The lambda here infers its return type as `std::string`,
and since `info` is `const`, the labmda copies `info.name`
and returns a `std::string&&`. After captured by the
`std::string_view`, the `std::string&&` return value
deconstructs and makes `std::string_view` refers to a
dangling pointer.
2021-10-17 04:38:56 -07:00
topjohnwu
d0fc372ecd
Implement Zygisk companion process
2021-10-17 04:36:18 -07:00
topjohnwu
6f54c57647
Allow fork in thread pool
2021-10-17 04:24:25 -07:00
topjohnwu
e8ae103d5f
Update jni hooks
2021-10-14 02:43:56 -07:00
topjohnwu
b0198dab6c
Update Zygisk logging
2021-10-14 02:13:23 -07:00
topjohnwu
b75ec09998
Load Zygisk modules even if no magic mount is needed
...
Close #4767
2021-10-14 01:35:29 -07:00
topjohnwu
c8ac6c07b0
Load Zygisk modules
2021-10-13 04:52:02 -07:00
topjohnwu
27814e3015
Minor Zygisk API changes
2021-10-09 11:53:40 -07:00
topjohnwu
f59309a445
Minor changes
2021-10-09 11:36:01 -07:00
vvb2060
b0292d7319
Add execmem to allow hook
2021-10-09 02:59:03 -07:00
topjohnwu
7f18616cc0
Prune unused nodes from trie
2021-10-09 02:15:03 -07:00
topjohnwu
2fef98a5af
Wipe out prop_info data after delete
2021-10-09 00:27:11 -07:00
topjohnwu
36765caedc
Fix thread pool implementation
...
Close #4759
2021-10-08 23:28:14 -07:00
topjohnwu
f7aed10ea2
Fix friend template function
2021-10-08 19:17:31 -07:00
topjohnwu
410bbb8285
Update Zygisk APIs
2021-10-05 22:42:55 -07:00
topjohnwu
f56ea52932
Add public Zygisk API
...
Still WIP
2021-10-05 03:53:22 -07:00
vvb2060
cb4361b7b7
Fix terminal on android 8
...
No need to handle untrusted_app_all_devpts on modern devices, but devpts policy is different for older devices.
2021-09-25 12:08:35 -07:00
vvb2060
ecd332c573
Close fd
2021-09-25 12:07:52 -07:00
topjohnwu
f642fb3b99
Properly handle child zygote
...
Close #4720
2021-09-24 01:23:58 -07:00
topjohnwu
e68dd866a3
Only create app_id_map if necessary
2021-09-24 00:22:19 -07:00
topjohnwu
73d36fdff0
Riru and its modules are not compatible with zygisk
2021-09-23 23:54:46 -07:00
vvb2060
d20517483e
Prevent multiple mounts of devpts
2021-09-23 02:40:24 -07:00
topjohnwu
f3d39e7515
Update BusyBox
...
Fix #4657 , close #4602
2021-09-23 02:31:42 -07:00
残页
61783ffc82
Prevent original libselinux.so to be unmounted
...
libselinux.so will be unmounted when magiskd starts. If magiskd restarts (like it died before boot completed), the files we want to unmount is the original files because the modified files is unmounted in previous start, which will causes many crashes due to missing libselinux.so.
2021-09-22 19:34:44 -07:00
topjohnwu
05c4ad01d5
Move first stage unload into second stage
2021-09-22 19:33:08 -07:00
topjohnwu
12647dcf30
Improve memory map tricks
...
- In `unmap_all`, replace readable pages atomically with mmap + mremap
- Create new function `remap_all` to replace pages with equivalent
anonymous copies to prevent simple maps name scanning
2021-09-22 19:14:05 -07:00
topjohnwu
da38f59e62
Only run destructor if necessary
2021-09-22 02:52:33 -07:00
topjohnwu
cf4ef54dc5
Unload first stage on main thread
2021-09-22 02:46:07 -07:00
topjohnwu
12e9873514
Update zygisk entry implementation
2021-09-22 00:14:22 -07:00
RikkaW
f7c0e407ca
Fix downgrade database
2021-09-20 05:50:34 -07:00
topjohnwu
82c7662cdf
Cache Magisk app ID for performance
2021-09-20 05:47:15 -07:00
topjohnwu
4f0bced53e
Track app ID instead of UID
2021-09-20 05:08:25 -07:00
topjohnwu
f1b6c9f4aa
Refresh uid_map on package.xml change
2021-09-20 04:42:06 -07:00
topjohnwu
0ab31ab0df
Fix log writer
2021-09-19 13:41:45 -07:00
topjohnwu
46e8f0779f
Move denylist code into zygisk
2021-09-18 14:50:11 -07:00
topjohnwu
3fb72a4d20
Support polling on multiple fds
2021-09-18 14:40:12 -07:00
topjohnwu
db20f65d7c
On denylist != do unmount
2021-09-18 12:44:42 -07:00
topjohnwu
63cfe7b47b
Make sanitize_environ work properly
2021-09-18 05:11:10 -07:00
topjohnwu
db590091b3
Propagate Zygisk state to Magisk app
2021-09-18 02:38:53 -07:00
topjohnwu
7b25e74418
Simplify get manager app info logic
2021-09-17 02:07:32 -07:00
topjohnwu
706a492218
Update denylist config implementation
2021-09-16 05:27:34 -07:00
topjohnwu
c0be5383de
Support enable/disable Zygisk
2021-09-15 02:49:54 -07:00
topjohnwu
3b8ce85092
Enable Zygisk
2021-09-15 01:59:43 -07:00
topjohnwu
65b0ea792e
MagiskHide is no more
2021-09-12 12:40:34 -07:00
topjohnwu
24a8b41182
Fix indentation
2021-09-09 01:37:49 -07:00
vvb2060
810cf4dee8
Move config to buildSrc
2021-09-09 01:37:20 -07:00
topjohnwu
de2306bd12
Proper incremental builds
...
Auto generate flag.h for precise rebuilding
2021-09-07 19:35:28 -07:00
topjohnwu
f8f8c28fec
Switch zopfli to official repo
2021-09-03 10:39:23 -07:00
vvb2060
f497867ba5
Update submodules
2021-09-03 10:24:33 -07:00
残页
c0a2e3674c
Reset file context from adb_data_file
...
In some cases (like weird ROMs that allow init to relabel context from system_file), module files will have an incorrent context, which will causes module not working properly.
See https://github.com/RikkaApps/Riru/wiki/Explanation-about-incorrect-SELinux-rules-from-third-party-ROMs-cause-Riru-not-working
2021-09-02 21:55:08 -07:00
vvb2060
76f0602684
Make busybox cflag stable
2021-09-02 21:48:38 -07:00
vvb2060
f5c02be5bf
Add new targetSdk domain
...
https://android-review.googlesource.com/c/platform/system/sepolicy/+/1752122
2021-09-02 01:48:25 -07:00
Wang Han
e990ffd4a0
Remove leftover DISABLE_ZYGISK flag
2021-09-01 20:14:53 -07:00
vvb2060
f98c68a280
Clean up unneeded rules
2021-08-29 13:03:50 -07:00
LoveSy
8079d456ab
Use std::map instead
2021-08-29 03:27:15 -07:00
vvb2060
acf166cf9d
Support oplus.fstab
2021-08-29 03:27:15 -07:00
vvb2060
439d497a13
boot image header v4
2021-08-29 03:14:23 -07:00
LoveSy
4bcfee397b
Remove unnecessary umount
2021-08-29 02:45:49 -07:00
vvb2060
34bcb1dd26
Fix line editing on Android 8.0+
2021-08-29 02:45:49 -07:00
LoveSy
117d1ed080
Fix always enter safe mode
...
`getprop("persist.sys.safemode", true) == "1"` -> `getprop("persist.sys.safemode", true) == ""`
2021-08-29 02:45:49 -07:00
vvb2060
f324252681
Use isolated devpts if kernel support
...
kernel version >= 4.7 or CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
2021-08-29 02:45:49 -07:00
LoveSy
0dad06cdfe
Fix meizu compatibility
2021-08-28 21:03:12 -07:00
LoveSy
f89f08833e
Generic parsing methods
2021-08-28 20:50:17 -07:00
vvb2060
79e8962854
Support bootconfig
...
https://android-review.googlesource.com/c/platform/system/core/+/1615298
2021-08-28 20:50:17 -07:00
topjohnwu
34e5a7cd24
Zopfli is not always smaller
2021-08-28 17:16:20 -07:00
topjohnwu
7343c195b7
Cleanup compress.cpp
2021-08-28 17:01:08 -07:00
topjohnwu
0af041b54e
Cleanup magiskboot code
2021-08-28 14:07:34 -07:00
Chaosmaster
92a8a3e91f
Add zopfli gzip encoder for better compression
2021-08-28 11:00:30 -07:00
Chaosmaster
f41575d8b0
Add support for legacy ARM32 zImage
2021-08-28 10:53:45 -07:00
topjohnwu
6fe9b69aad
Cleanup module.cpp
2021-08-28 10:27:45 -07:00
topjohnwu
5d162f81c4
Modernize db.hpp
2021-08-27 01:06:03 -07:00
topjohnwu
4771c2810b
Significantly better AVD support
2021-08-26 03:09:56 -07:00
topjohnwu
0cd99712fa
Implement cached thread pool
2021-08-24 02:39:54 -07:00
topjohnwu
b591af7803
Minor bug fixes
2021-08-22 03:26:48 -07:00
topjohnwu
171d68ca72
Connect to magiskd log daemon
2021-08-22 03:26:48 -07:00
topjohnwu
bade4f2c6a
Make xhook log as Magisk
2021-08-22 03:26:48 -07:00
topjohnwu
5754782a4e
Generalize gen_jni_hooks.py
2021-08-22 03:26:48 -07:00
topjohnwu
decdd54c19
Hook up denylist IPC routines
2021-08-22 03:26:48 -07:00
topjohnwu
ffe47300a1
Update recv/send fd function
2021-08-22 03:26:48 -07:00
topjohnwu
6f9c3c4ff3
Refactor hook.cpp
2021-08-19 01:54:12 -07:00