Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
b10379e7
Commit
b10379e7
authored
Mar 14, 2022
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleanup inheritance
parent
810d27a6
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
44 additions
and
53 deletions
+44
-53
init.cpp
native/jni/init/init.cpp
+2
-3
init.hpp
native/jni/init/init.hpp
+33
-41
mount.cpp
native/jni/init/mount.cpp
+4
-4
rootdir.cpp
native/jni/init/rootdir.cpp
+3
-3
twostage.cpp
native/jni/init/twostage.cpp
+2
-2
No files found.
native/jni/init/init.cpp
View file @
b10379e7
...
...
@@ -56,7 +56,7 @@ static int dump_manager(const char *path, mode_t mode) {
class
RecoveryInit
:
public
BaseInit
{
public
:
RecoveryInit
(
char
*
argv
[],
BootConfig
*
cmd
)
:
BaseInit
(
argv
,
cmd
)
{}
using
BaseInit
::
BaseInit
;
void
start
()
override
{
LOGD
(
"Ramdisk is recovery, abort
\n
"
);
rename
(
backup_init
(),
"/init"
);
...
...
@@ -144,14 +144,13 @@ int main(int argc, char *argv[]) {
BootConfig
config
{};
if
(
argc
>
1
&&
argv
[
1
]
==
"selinux_setup"
sv
)
{
setup_klog
();
init
=
new
SecondStageInit
(
argv
);
}
else
{
// This will also mount /sys and /proc
load_kernel_info
(
&
config
);
if
(
config
.
skip_initramfs
)
init
=
new
SARInit
(
argv
,
&
config
);
init
=
new
Legacy
SARInit
(
argv
,
&
config
);
else
if
(
config
.
force_normal_boot
)
init
=
new
FirstStageInit
(
argv
,
&
config
);
else
if
(
access
(
"/sbin/recovery"
,
F_OK
)
==
0
||
access
(
"/system/bin/recovery"
,
F_OK
)
==
0
)
...
...
native/jni/init/init.hpp
View file @
b10379e7
...
...
@@ -59,7 +59,7 @@ protected:
[[
noreturn
]]
void
exec_init
();
void
read_dt_fstab
(
std
::
vector
<
fstab_entry
>
&
fstab
);
public
:
BaseInit
(
char
*
argv
[],
BootConfig
*
config
)
:
config
(
config
),
argv
(
argv
)
{}
BaseInit
(
char
*
argv
[],
BootConfig
*
config
=
nullptr
)
:
config
(
config
),
argv
(
argv
)
{}
virtual
~
BaseInit
()
=
default
;
virtual
void
start
()
=
0
;
};
...
...
@@ -67,7 +67,7 @@ public:
class
MagiskInit
:
public
BaseInit
{
protected
:
mmap_data
self
;
mmap_data
magisk_c
onfi
g
;
mmap_data
magisk_c
f
g
;
std
::
string
custom_rules_dir
;
#if ENABLE_AVD_HACK
...
...
@@ -83,19 +83,20 @@ protected:
bool
patch_sepolicy
(
const
char
*
file
);
void
setup_tmp
(
const
char
*
path
);
void
mount_rules_dir
(
const
char
*
dev_base
,
const
char
*
mnt_base
);
void
patch_rw_root
();
public
:
MagiskInit
(
char
*
argv
[],
BootConfig
*
cmd
)
:
BaseInit
(
argv
,
cmd
)
{}
using
BaseInit
::
BaseInit
;
};
class
SARBase
:
virtual
public
MagiskInit
{
class
SARBase
:
public
MagiskInit
{
protected
:
std
::
vector
<
raw_file
>
overlays
;
void
backup_files
();
void
patch_ro
otdir
();
void
patch_ro
_root
();
void
mount_system_root
();
public
:
SARBase
()
=
defaul
t
;
using
MagiskInit
::
MagiskIni
t
;
};
/***************
...
...
@@ -106,7 +107,7 @@ class FirstStageInit : public BaseInit {
private
:
void
prepare
();
public
:
FirstStageInit
(
char
*
argv
[],
BootConfig
*
c
md
)
:
BaseInit
(
argv
,
cmd
)
{
FirstStageInit
(
char
*
argv
[],
BootConfig
*
c
onfig
)
:
BaseInit
(
argv
,
config
)
{
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
};
void
start
()
override
{
...
...
@@ -115,23 +116,41 @@ public:
}
};
class
SecondStageInit
:
public
SARBase
{
private
:
bool
prepare
();
public
:
SecondStageInit
(
char
*
argv
[])
:
SARBase
(
argv
)
{
setup_klog
();
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
};
void
start
()
override
{
if
(
prepare
())
patch_rw_root
();
else
patch_ro_root
();
exec_init
();
}
};
/*************
* Legacy SAR
*************/
class
SARInit
:
public
SARBase
{
class
Legacy
SARInit
:
public
SARBase
{
private
:
bool
early_mount
();
void
first_stage_prep
();
public
:
SARInit
(
char
*
argv
[],
BootConfig
*
cmd
)
:
MagiskInit
(
argv
,
cmd
)
{
LegacySARInit
(
char
*
argv
[],
BootConfig
*
config
)
:
SARBase
(
argv
,
config
)
{
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
};
void
start
()
override
{
if
(
early_mount
())
first_stage_prep
();
else
patch_ro
otdir
();
patch_ro
_root
();
exec_init
();
}
};
...
...
@@ -140,50 +159,23 @@ public:
* Initramfs
************/
class
RootFSBase
:
virtual
public
MagiskInit
{
protected
:
void
patch_rootfs
();
public
:
RootFSBase
()
=
default
;
void
start
()
=
0
;
};
class
RootFSInit
:
public
RootFSBase
{
class
RootFSInit
:
public
MagiskInit
{
private
:
void
early_mount
();
public
:
RootFSInit
(
char
*
argv
[],
BootConfig
*
c
md
)
:
MagiskInit
(
argv
,
cmd
)
{
RootFSInit
(
char
*
argv
[],
BootConfig
*
c
onfig
)
:
MagiskInit
(
argv
,
config
)
{
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
}
void
start
()
override
{
early_mount
();
patch_rootfs
();
exec_init
();
}
};
class
SecondStageInit
:
public
RootFSBase
,
public
SARBase
{
private
:
bool
prepare
();
public
:
SecondStageInit
(
char
*
argv
[])
:
MagiskInit
(
argv
,
nullptr
)
{
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
};
void
start
()
override
{
if
(
prepare
())
patch_rootfs
();
else
patch_rootdir
();
patch_rw_root
();
exec_init
();
}
};
class
MagiskProxy
:
public
MagiskInit
{
public
:
explicit
MagiskProxy
(
char
*
argv
[])
:
MagiskInit
(
argv
,
nullptr
)
{
explicit
MagiskProxy
(
char
*
argv
[])
:
MagiskInit
(
argv
)
{
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
}
void
start
()
override
;
...
...
native/jni/init/mount.cpp
View file @
b10379e7
...
...
@@ -311,9 +311,9 @@ void SARBase::backup_files() {
self
=
mmap_data
(
"/proc/self/exe"
);
if
(
access
(
"/.backup/.magisk"
,
R_OK
)
==
0
)
magisk_c
onfi
g
=
mmap_data
(
"/.backup/.magisk"
);
magisk_c
f
g
=
mmap_data
(
"/.backup/.magisk"
);
else
if
(
access
(
"/data/.backup/.magisk"
,
R_OK
)
==
0
)
magisk_c
onfi
g
=
mmap_data
(
"/data/.backup/.magisk"
);
magisk_c
f
g
=
mmap_data
(
"/data/.backup/.magisk"
);
}
void
SARBase
::
mount_system_root
()
{
...
...
@@ -350,7 +350,7 @@ mount_root:
xmount
(
"/dev/root"
,
"/system_root"
,
"erofs"
,
MS_RDONLY
,
nullptr
);
}
bool
SARInit
::
early_mount
()
{
bool
Legacy
SARInit
::
early_mount
()
{
backup_files
();
mount_system_root
();
switch_root
(
"/system_root"
);
...
...
@@ -394,7 +394,7 @@ void MagiskInit::setup_tmp(const char *path) {
xmkdir
(
BLOCKDIR
,
0
);
int
fd
=
xopen
(
INTLROOT
"/config"
,
O_WRONLY
|
O_CREAT
,
0
);
xwrite
(
fd
,
magisk_c
onfig
.
buf
,
magisk_confi
g
.
sz
);
xwrite
(
fd
,
magisk_c
fg
.
buf
,
magisk_cf
g
.
sz
);
close
(
fd
);
fd
=
xopen
(
"magiskinit"
,
O_WRONLY
|
O_CREAT
,
0755
);
xwrite
(
fd
,
self
.
buf
,
self
.
sz
);
...
...
native/jni/init/rootdir.cpp
View file @
b10379e7
...
...
@@ -202,7 +202,7 @@ static void patch_socket_name(const char *path) {
#define MONOPOLICY "/sepolicy"
#define NEW_INITRC "/system/etc/init/hw/init.rc"
void
SARBase
::
patch_ro
otdir
()
{
void
SARBase
::
patch_ro
_root
()
{
string
tmp_dir
;
const
char
*
sepol
;
...
...
@@ -327,7 +327,7 @@ void SARBase::patch_rootdir() {
#define TMP_MNTDIR "/dev/mnt"
#define TMP_RULESDIR "/.backup/.sepolicy.rules"
void
RootFSBase
::
patch_rootfs
()
{
void
MagiskInit
::
patch_rw_root
()
{
// Create hardlink mirror of /sbin to /root
mkdir
(
"/root"
,
0777
);
clone_attr
(
"/sbin"
,
"/root"
);
...
...
@@ -378,7 +378,7 @@ void MagiskProxy::start() {
// Backup stuffs before removing them
self
=
mmap_data
(
"/sbin/magisk"
);
magisk_c
onfi
g
=
mmap_data
(
"/.backup/.magisk"
);
magisk_c
f
g
=
mmap_data
(
"/.backup/.magisk"
);
auto
magisk
=
mmap_data
(
"/sbin/magisk32.xz"
);
auto
magisk64
=
mmap_data
(
"/sbin/magisk64.xz"
);
char
custom_rules_dir
[
64
];
...
...
native/jni/init/twostage.cpp
View file @
b10379e7
...
...
@@ -30,7 +30,7 @@ void FirstStageInit::prepare() {
cp_afc
(
"overlay.d"
,
"/data/overlay.d"
);
}
void
SARInit
::
first_stage_prep
()
{
void
Legacy
SARInit
::
first_stage_prep
()
{
xmount
(
"tmpfs"
,
"/data"
,
"tmpfs"
,
0
,
"mode=755"
);
// Patch init binary
...
...
@@ -57,7 +57,7 @@ void SARInit::first_stage_prep() {
xmkdir
(
"/data/overlay.d"
,
0
);
restore_folder
(
"/data/overlay.d"
,
overlays
);
int
cfg
=
xopen
(
"/data/.backup/config"
,
O_WRONLY
|
O_CREAT
,
0
);
xwrite
(
cfg
,
magisk_c
onfig
.
buf
,
magisk_confi
g
.
sz
);
xwrite
(
cfg
,
magisk_c
fg
.
buf
,
magisk_cf
g
.
sz
);
close
(
cfg
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment