Commit Graph

42 Commits

Author SHA1 Message Date
topjohnwu 51ff724691 Unblock all signals in root shell process
Fix #1563
2019-07-07 12:30:57 -07:00
topjohnwu 291bf93f9d Proper timing 2019-07-07 12:20:47 -07:00
topjohnwu 5fcd629f16 Rearrange su daemon routine 2019-07-07 12:20:19 -07:00
topjohnwu ab90901793 Use C++ smart pointer for caching su_info 2019-07-07 00:31:49 -07:00
topjohnwu ff3710de66 Minor code changes across all sources 2019-06-30 19:09:31 -07:00
topjohnwu 9f8d4e1022 Properly isolate mount namespace 2019-06-04 21:21:27 -07:00
topjohnwu 80cd85b061 Try to use broadcast for su logging and notify
In commit 8d4c407, native Magisk always launches an activity for
communicating with Magisk Manager. While this works extremely well,
since it also workaround stupid OEMs that blocks broadcasts, it has a
problem: launching an activity will claim the focus of the device,
which could be super annoying in some circumstances.

This commit adds a new feature to run a broadcast test on boot complete.
If Magisk Manager successfully receives the broadcast, it will toggle
a setting in magiskd so all future su loggings and notifies will always
use broadcasts instead of launching activities.

Fix #1412
2019-05-13 02:01:10 -07:00
topjohnwu 00a9f18a1e Build with -Wall 2019-04-29 21:26:43 -04:00
topjohnwu 8d4c407201 Directly communicate with Activity
Since Android Q does not allow launching activities from the background
(Services/BroadcastReceivers) and our native process is root, directly
launch activities and use it for communication between native and app.

The target activity is not exported, so non-root apps cannot send an
intent to fool Magisk Manager. This is as safe as the previous
implementation, which uses protected system broadcasts.

This also workaround broadcast limitations in many ROMs (especially
in Chinese ROMs) which blocks the su request dialog if the app is
frozen/force stopped by the system.

Close #1326
2019-04-10 23:35:31 -04:00
topjohnwu d2cb638fcd Use our own function to parse int 2019-03-07 20:31:35 -05:00
topjohnwu 370015a853 Modernize database code (again) 2019-03-06 08:16:12 -05:00
John Wu 54a8a05dae Small adjustments in connect.cpp 2019-02-27 16:44:27 -05:00
vvb2060 0eef4eacd6 Use REBOOT foreground broadcast 2019-02-27 16:44:27 -05:00
topjohnwu ed027ec3ee Refactor build flags 2019-02-12 05:17:02 -05:00
topjohnwu 71ecbb3af3 Clean/refactor includes 2019-02-10 03:57:51 -05:00
vvb2060 2cf33d635d Setuid after read proc 2019-02-01 15:55:29 -05:00
topjohnwu 1c61feb368 Update native su connect broadcast code
Use -p <pkg> for supported platforms
2019-01-26 14:53:49 -05:00
topjohnwu 0be158afa1 Official KitKat support 2018-12-28 16:03:23 +08:00
topjohnwu 523e66294b Simpler su_info caching system 2018-12-26 11:56:49 +08:00
topjohnwu 762b678d24 Prevent any SELinux issues of root shell streams 2018-11-23 21:08:06 -05:00
topjohnwu de0064af47 Fix SIGWINCH never followed
Close #786
2018-11-20 04:40:42 -05:00
topjohnwu 2ab999f4ca Fix bug in DB query wrapper 2018-11-20 02:20:49 -05:00
topjohnwu c9f390d6e0 Abort upon any error occurred 2018-11-20 02:20:49 -05:00
topjohnwu ab5fedda0b Prevent Magisk database race condition
The database should only be accessed by a single process, which is magiskd.
This means 'magisk --sqlite [SQL]' has to be updated to pass the SQL command to the daemon.
In addition, open the database connection with SQLITE_OPEN_FULLMUTEX to support multithread in magiskd.
2018-11-16 03:20:30 -05:00
topjohnwu c61c3ae0e9 Fix su shell environment setup 2018-11-10 02:17:13 -05:00
topjohnwu 0742901cd2 Modernize database code 2018-11-04 18:24:08 -05:00
topjohnwu cda57dd4b4 Fully migrate Magisk to C++ 2018-11-04 04:15:51 -05:00
vvb2060 1eb7d7b7a8 Add FLAG_INCLUDE_STOPPED_PACKAGES for broadcast 2018-11-03 00:04:27 -04:00
topjohnwu bf4a46d57c Optimize logging in Magisk Manager 2018-10-27 22:06:24 -04:00
topjohnwu dbb8b8a439 Handle magisk.db completely natively
Prevent database corruption due to different Android application sqlite default settings
2018-10-27 17:54:48 -04:00
topjohnwu 41b01003fd Always ACK before doing anything 2018-10-20 16:12:08 -04:00
topjohnwu a9121fa28f Reorganize libutils and cleanups 2018-10-12 21:46:09 -04:00
topjohnwu e8e39e0f3c Use poll instead of select
Close #637
2018-10-04 15:06:13 -04:00
topjohnwu 37860181d4 Finish su implementation 2018-10-04 14:41:48 -04:00
topjohnwu d119dd9a0c Rewrite su daemon and client 2018-10-04 04:59:51 -04:00
topjohnwu 09ef19f7ec Code cleanups 2018-10-04 01:49:52 -04:00
topjohnwu 6a06c92fa6 Simplify su_info caches
No more lists. 99.999% it will only handle a single excessive requestor anyways.
2018-10-03 23:31:15 -04:00
topjohnwu 60b3b8ddce Better incremental builds 2018-09-27 03:56:56 -04:00
topjohnwu 1d53335ae5 Dynamic load libselinux 2018-09-27 00:09:59 -04:00
topjohnwu 906b4aad9e New method of communication
Introduce a new communication method between Magisk and Magisk Manager.

Magisk used to hardcode classnames and send broadcast/start activities to
specific components. This new method makes no assumption of any class names,
so Magisk Manager can easily be fully obfuscated.

In addition, the new method connects Magisk and Magisk Manager with random
abstract Linux sockets instead of socket files in filesystems, bypassing
file system complexities (selinux, permissions and such)
2018-09-16 04:16:18 -04:00
topjohnwu f1edc8443c Make root shell always use dev_pts
Close #433
2018-08-02 20:29:18 +08:00
topjohnwu cf211e26f4 Move MagiskSU sources to native/jni/su 2018-07-18 18:23:36 +08:00