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
50710c72
Commit
50710c72
authored
Oct 26, 2021
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleanup magiskinit code
parent
2e299b38
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
124 additions
and
135 deletions
+124
-135
getinfo.cpp
native/jni/init/getinfo.cpp
+86
-102
init.cpp
native/jni/init/init.cpp
+10
-10
init.hpp
native/jni/init/init.hpp
+14
-9
mount.cpp
native/jni/init/mount.cpp
+7
-7
rootdir.cpp
native/jni/init/rootdir.cpp
+1
-1
twostage.cpp
native/jni/init/twostage.cpp
+6
-6
No files found.
native/jni/init/getinfo.cpp
View file @
50710c72
This diff is collapsed.
Click to expand it.
native/jni/init/init.cpp
View file @
50710c72
...
@@ -56,7 +56,7 @@ static int dump_manager(const char *path, mode_t mode) {
...
@@ -56,7 +56,7 @@ static int dump_manager(const char *path, mode_t mode) {
class
RecoveryInit
:
public
BaseInit
{
class
RecoveryInit
:
public
BaseInit
{
public
:
public
:
RecoveryInit
(
char
*
argv
[],
cmdline
*
cmd
)
:
BaseInit
(
argv
,
cmd
)
{}
RecoveryInit
(
char
*
argv
[],
BootConfig
*
cmd
)
:
BaseInit
(
argv
,
cmd
)
{}
void
start
()
override
{
void
start
()
override
{
LOGD
(
"Ramdisk is recovery, abort
\n
"
);
LOGD
(
"Ramdisk is recovery, abort
\n
"
);
rename
(
"/.backup/init"
,
"/init"
);
rename
(
"/.backup/init"
,
"/init"
);
...
@@ -141,25 +141,25 @@ int main(int argc, char *argv[]) {
...
@@ -141,25 +141,25 @@ int main(int argc, char *argv[]) {
return
1
;
return
1
;
BaseInit
*
init
;
BaseInit
*
init
;
cmdline
cmd
{};
BootConfig
config
{};
if
(
argc
>
1
&&
argv
[
1
]
==
"selinux_setup"
sv
)
{
if
(
argc
>
1
&&
argv
[
1
]
==
"selinux_setup"
sv
)
{
setup_klog
();
setup_klog
();
init
=
new
SecondStageInit
(
argv
);
init
=
new
SecondStageInit
(
argv
);
}
else
{
}
else
{
// This will also mount /sys and /proc
// This will also mount /sys and /proc
load_kernel_info
(
&
c
md
);
load_kernel_info
(
&
c
onfig
);
if
(
c
md
.
skip_initramfs
)
if
(
c
onfig
.
skip_initramfs
)
init
=
new
SARInit
(
argv
,
&
c
md
);
init
=
new
SARInit
(
argv
,
&
c
onfig
);
else
if
(
c
md
.
force_normal_boot
)
else
if
(
c
onfig
.
force_normal_boot
)
init
=
new
FirstStageInit
(
argv
,
&
c
md
);
init
=
new
FirstStageInit
(
argv
,
&
c
onfig
);
else
if
(
access
(
"/sbin/recovery"
,
F_OK
)
==
0
||
access
(
"/system/bin/recovery"
,
F_OK
)
==
0
)
else
if
(
access
(
"/sbin/recovery"
,
F_OK
)
==
0
||
access
(
"/system/bin/recovery"
,
F_OK
)
==
0
)
init
=
new
RecoveryInit
(
argv
,
&
c
md
);
init
=
new
RecoveryInit
(
argv
,
&
c
onfig
);
else
if
(
check_two_stage
())
else
if
(
check_two_stage
())
init
=
new
FirstStageInit
(
argv
,
&
c
md
);
init
=
new
FirstStageInit
(
argv
,
&
c
onfig
);
else
else
init
=
new
RootFSInit
(
argv
,
&
c
md
);
init
=
new
RootFSInit
(
argv
,
&
c
onfig
);
}
}
// Run the main routine
// Run the main routine
...
...
native/jni/init/init.hpp
View file @
50710c72
...
@@ -2,7 +2,9 @@
...
@@ -2,7 +2,9 @@
#include "raw_data.hpp"
#include "raw_data.hpp"
struct
cmdline
{
using
kv_pairs
=
std
::
vector
<
std
::
pair
<
std
::
string
,
std
::
string
>>
;
struct
BootConfig
{
bool
skip_initramfs
;
bool
skip_initramfs
;
bool
force_normal_boot
;
bool
force_normal_boot
;
bool
rootwait
;
bool
rootwait
;
...
@@ -11,6 +13,9 @@ struct cmdline {
...
@@ -11,6 +13,9 @@ struct cmdline {
char
fstab_suffix
[
32
];
char
fstab_suffix
[
32
];
char
hardware
[
32
];
char
hardware
[
32
];
char
hardware_plat
[
32
];
char
hardware_plat
[
32
];
void
set
(
const
kv_pairs
&
);
void
print
();
};
};
struct
fstab_entry
{
struct
fstab_entry
{
...
@@ -32,7 +37,7 @@ struct fstab_entry {
...
@@ -32,7 +37,7 @@ struct fstab_entry {
extern
std
::
vector
<
std
::
string
>
mount_list
;
extern
std
::
vector
<
std
::
string
>
mount_list
;
bool
unxz
(
int
fd
,
const
uint8_t
*
buf
,
size_t
size
);
bool
unxz
(
int
fd
,
const
uint8_t
*
buf
,
size_t
size
);
void
load_kernel_info
(
cmdline
*
cmd
);
void
load_kernel_info
(
BootConfig
*
config
);
bool
check_two_stage
();
bool
check_two_stage
();
void
setup_klog
();
void
setup_klog
();
...
@@ -42,13 +47,13 @@ void setup_klog();
...
@@ -42,13 +47,13 @@ void setup_klog();
class
BaseInit
{
class
BaseInit
{
protected
:
protected
:
cmdline
*
cmd
=
nullptr
;
BootConfig
*
config
=
nullptr
;
char
**
argv
=
nullptr
;
char
**
argv
=
nullptr
;
[[
noreturn
]]
void
exec_init
();
[[
noreturn
]]
void
exec_init
();
void
read_dt_fstab
(
std
::
vector
<
fstab_entry
>
&
fstab
);
void
read_dt_fstab
(
std
::
vector
<
fstab_entry
>
&
fstab
);
public
:
public
:
BaseInit
(
char
*
argv
[],
cmdline
*
cmd
)
:
cmd
(
cmd
),
argv
(
argv
)
{}
BaseInit
(
char
*
argv
[],
BootConfig
*
config
)
:
config
(
config
),
argv
(
argv
)
{}
virtual
~
BaseInit
()
=
default
;
virtual
~
BaseInit
()
=
default
;
virtual
void
start
()
=
0
;
virtual
void
start
()
=
0
;
};
};
...
@@ -56,7 +61,7 @@ public:
...
@@ -56,7 +61,7 @@ public:
class
MagiskInit
:
public
BaseInit
{
class
MagiskInit
:
public
BaseInit
{
protected
:
protected
:
mmap_data
self
;
mmap_data
self
;
mmap_data
config
;
mmap_data
magisk_
config
;
std
::
string
custom_rules_dir
;
std
::
string
custom_rules_dir
;
void
mount_with_dt
();
void
mount_with_dt
();
...
@@ -64,7 +69,7 @@ protected:
...
@@ -64,7 +69,7 @@ protected:
void
setup_tmp
(
const
char
*
path
);
void
setup_tmp
(
const
char
*
path
);
void
mount_rules_dir
(
const
char
*
dev_base
,
const
char
*
mnt_base
);
void
mount_rules_dir
(
const
char
*
dev_base
,
const
char
*
mnt_base
);
public
:
public
:
MagiskInit
(
char
*
argv
[],
cmdline
*
cmd
)
:
BaseInit
(
argv
,
cmd
)
{}
MagiskInit
(
char
*
argv
[],
BootConfig
*
cmd
)
:
BaseInit
(
argv
,
cmd
)
{}
};
};
class
SARBase
:
virtual
public
MagiskInit
{
class
SARBase
:
virtual
public
MagiskInit
{
...
@@ -86,7 +91,7 @@ class FirstStageInit : public BaseInit {
...
@@ -86,7 +91,7 @@ class FirstStageInit : public BaseInit {
private
:
private
:
void
prepare
();
void
prepare
();
public
:
public
:
FirstStageInit
(
char
*
argv
[],
cmdline
*
cmd
)
:
BaseInit
(
argv
,
cmd
)
{
FirstStageInit
(
char
*
argv
[],
BootConfig
*
cmd
)
:
BaseInit
(
argv
,
cmd
)
{
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
};
};
void
start
()
override
{
void
start
()
override
{
...
@@ -106,7 +111,7 @@ private:
...
@@ -106,7 +111,7 @@ private:
void
early_mount
();
void
early_mount
();
void
first_stage_prep
();
void
first_stage_prep
();
public
:
public
:
SARInit
(
char
*
argv
[],
cmdline
*
cmd
)
:
MagiskInit
(
argv
,
cmd
),
is_two_stage
(
false
)
{
SARInit
(
char
*
argv
[],
BootConfig
*
cmd
)
:
MagiskInit
(
argv
,
cmd
),
is_two_stage
(
false
)
{
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
};
};
void
start
()
override
{
void
start
()
override
{
...
@@ -136,7 +141,7 @@ private:
...
@@ -136,7 +141,7 @@ private:
void
early_mount
();
void
early_mount
();
public
:
public
:
RootFSInit
(
char
*
argv
[],
cmdline
*
cmd
)
:
MagiskInit
(
argv
,
cmd
)
{
RootFSInit
(
char
*
argv
[],
BootConfig
*
cmd
)
:
MagiskInit
(
argv
,
cmd
)
{
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
LOGD
(
"%s
\n
"
,
__FUNCTION__
);
}
}
void
start
()
override
{
void
start
()
override
{
...
...
native/jni/init/mount.cpp
View file @
50710c72
...
@@ -105,12 +105,12 @@ if (access(#val, F_OK) == 0) {\
...
@@ -105,12 +105,12 @@ if (access(#val, F_OK) == 0) {\
}
}
void
BaseInit
::
read_dt_fstab
(
vector
<
fstab_entry
>
&
fstab
)
{
void
BaseInit
::
read_dt_fstab
(
vector
<
fstab_entry
>
&
fstab
)
{
if
(
access
(
c
md
->
dt_dir
,
F_OK
)
!=
0
)
if
(
access
(
c
onfig
->
dt_dir
,
F_OK
)
!=
0
)
return
;
return
;
char
cwd
[
128
];
char
cwd
[
128
];
getcwd
(
cwd
,
sizeof
(
cwd
));
getcwd
(
cwd
,
sizeof
(
cwd
));
chdir
(
c
md
->
dt_dir
);
chdir
(
c
onfig
->
dt_dir
);
run_finally
cd
([
&
]{
chdir
(
cwd
);
});
run_finally
cd
([
&
]{
chdir
(
cwd
);
});
if
(
access
(
"fstab"
,
F_OK
)
!=
0
)
if
(
access
(
"fstab"
,
F_OK
)
!=
0
)
...
@@ -159,7 +159,7 @@ void MagiskInit::mount_with_dt() {
...
@@ -159,7 +159,7 @@ void MagiskInit::mount_with_dt() {
if
(
is_lnk
(
entry
.
mnt_point
.
data
()))
if
(
is_lnk
(
entry
.
mnt_point
.
data
()))
continue
;
continue
;
// Derive partname from dev
// Derive partname from dev
sprintf
(
blk_info
.
partname
,
"%s%s"
,
basename
(
entry
.
dev
.
data
()),
c
md
->
slot
);
sprintf
(
blk_info
.
partname
,
"%s%s"
,
basename
(
entry
.
dev
.
data
()),
c
onfig
->
slot
);
setup_block
(
true
);
setup_block
(
true
);
xmkdir
(
entry
.
mnt_point
.
data
(),
0755
);
xmkdir
(
entry
.
mnt_point
.
data
(),
0755
);
xmount
(
blk_info
.
block_dev
,
entry
.
mnt_point
.
data
(),
entry
.
type
.
data
(),
MS_RDONLY
,
nullptr
);
xmount
(
blk_info
.
block_dev
,
entry
.
mnt_point
.
data
(),
entry
.
type
.
data
(),
MS_RDONLY
,
nullptr
);
...
@@ -300,7 +300,7 @@ void SARBase::backup_files() {
...
@@ -300,7 +300,7 @@ void SARBase::backup_files() {
self
=
mmap_data
::
ro
(
"/proc/self/exe"
);
self
=
mmap_data
::
ro
(
"/proc/self/exe"
);
if
(
access
(
"/.backup/.magisk"
,
R_OK
)
==
0
)
if
(
access
(
"/.backup/.magisk"
,
R_OK
)
==
0
)
config
=
mmap_data
::
ro
(
"/.backup/.magisk"
);
magisk_
config
=
mmap_data
::
ro
(
"/.backup/.magisk"
);
}
}
void
SARBase
::
mount_system_root
()
{
void
SARBase
::
mount_system_root
()
{
...
@@ -320,13 +320,13 @@ void SARBase::mount_system_root() {
...
@@ -320,13 +320,13 @@ void SARBase::mount_system_root() {
if
(
dev
>=
0
)
if
(
dev
>=
0
)
goto
mount_root
;
goto
mount_root
;
sprintf
(
blk_info
.
partname
,
"system%s"
,
c
md
->
slot
);
sprintf
(
blk_info
.
partname
,
"system%s"
,
c
onfig
->
slot
);
dev
=
setup_block
(
false
);
dev
=
setup_block
(
false
);
if
(
dev
>=
0
)
if
(
dev
>=
0
)
goto
mount_root
;
goto
mount_root
;
// Poll forever if rootwait was given in cmdline
// Poll forever if rootwait was given in cmdline
}
while
(
c
md
->
rootwait
);
}
while
(
c
onfig
->
rootwait
);
// We don't really know what to do at this point...
// We don't really know what to do at this point...
LOGE
(
"Cannot find root partition, abort
\n
"
);
LOGE
(
"Cannot find root partition, abort
\n
"
);
...
@@ -396,7 +396,7 @@ void MagiskInit::setup_tmp(const char *path) {
...
@@ -396,7 +396,7 @@ void MagiskInit::setup_tmp(const char *path) {
xmkdir
(
BLOCKDIR
,
0
);
xmkdir
(
BLOCKDIR
,
0
);
int
fd
=
xopen
(
INTLROOT
"/config"
,
O_WRONLY
|
O_CREAT
,
0
);
int
fd
=
xopen
(
INTLROOT
"/config"
,
O_WRONLY
|
O_CREAT
,
0
);
xwrite
(
fd
,
config
.
buf
,
config
.
sz
);
xwrite
(
fd
,
magisk_config
.
buf
,
magisk_
config
.
sz
);
close
(
fd
);
close
(
fd
);
fd
=
xopen
(
"magiskinit"
,
O_WRONLY
|
O_CREAT
,
0755
);
fd
=
xopen
(
"magiskinit"
,
O_WRONLY
|
O_CREAT
,
0755
);
xwrite
(
fd
,
self
.
buf
,
self
.
sz
);
xwrite
(
fd
,
self
.
buf
,
self
.
sz
);
...
...
native/jni/init/rootdir.cpp
View file @
50710c72
...
@@ -372,7 +372,7 @@ void MagiskProxy::start() {
...
@@ -372,7 +372,7 @@ void MagiskProxy::start() {
// Backup stuffs before removing them
// Backup stuffs before removing them
self
=
mmap_data
::
ro
(
"/sbin/magisk"
);
self
=
mmap_data
::
ro
(
"/sbin/magisk"
);
config
=
mmap_data
::
ro
(
"/.backup/.magisk"
);
magisk_
config
=
mmap_data
::
ro
(
"/.backup/.magisk"
);
auto
magisk
=
mmap_data
::
ro
(
"/sbin/magisk32.xz"
);
auto
magisk
=
mmap_data
::
ro
(
"/sbin/magisk32.xz"
);
auto
magisk64
=
mmap_data
::
ro
(
"/sbin/magisk64.xz"
);
auto
magisk64
=
mmap_data
::
ro
(
"/sbin/magisk64.xz"
);
char
custom_rules_dir
[
64
];
char
custom_rules_dir
[
64
];
...
...
native/jni/init/twostage.cpp
View file @
50710c72
...
@@ -57,7 +57,7 @@ static void read_fstab_file(const char *fstab_file, vector<fstab_entry> &fstab)
...
@@ -57,7 +57,7 @@ static void read_fstab_file(const char *fstab_file, vector<fstab_entry> &fstab)
extern
uint32_t
patch_verity
(
void
*
buf
,
uint32_t
size
);
extern
uint32_t
patch_verity
(
void
*
buf
,
uint32_t
size
);
void
FirstStageInit
::
prepare
()
{
void
FirstStageInit
::
prepare
()
{
if
(
c
md
->
force_normal_boot
)
{
if
(
c
onfig
->
force_normal_boot
)
{
xmkdirs
(
FSR
"/system/bin"
,
0755
);
xmkdirs
(
FSR
"/system/bin"
,
0755
);
rename
(
"/init"
/* magiskinit */
,
FSR
"/system/bin/init"
);
rename
(
"/init"
/* magiskinit */
,
FSR
"/system/bin/init"
);
symlink
(
"/system/bin/init"
,
FSR
"/init"
);
symlink
(
"/system/bin/init"
,
FSR
"/init"
);
...
@@ -78,7 +78,7 @@ void FirstStageInit::prepare() {
...
@@ -78,7 +78,7 @@ void FirstStageInit::prepare() {
fstab_file
[
0
]
=
'\0'
;
fstab_file
[
0
]
=
'\0'
;
// Find existing fstab file
// Find existing fstab file
for
(
const
char
*
suffix
:
{
cmd
->
fstab_suffix
,
cmd
->
hardware
,
cmd
->
hardware_plat
})
{
for
(
const
char
*
suffix
:
{
config
->
fstab_suffix
,
config
->
hardware
,
config
->
hardware_plat
})
{
if
(
suffix
[
0
]
==
'\0'
)
if
(
suffix
[
0
]
==
'\0'
)
continue
;
continue
;
for
(
const
char
*
prefix
:
{
"odm/etc/fstab"
,
"vendor/etc/fstab"
,
"fstab"
})
{
for
(
const
char
*
prefix
:
{
"odm/etc/fstab"
,
"vendor/etc/fstab"
,
"fstab"
})
{
...
@@ -111,9 +111,9 @@ exit_loop:
...
@@ -111,9 +111,9 @@ exit_loop:
if
(
fstab_file
[
0
]
==
'\0'
)
{
if
(
fstab_file
[
0
]
==
'\0'
)
{
const
char
*
suffix
=
const
char
*
suffix
=
c
md
->
fstab_suffix
[
0
]
?
cmd
->
fstab_suffix
:
c
onfig
->
fstab_suffix
[
0
]
?
config
->
fstab_suffix
:
(
c
md
->
hardware
[
0
]
?
cmd
->
hardware
:
(
c
onfig
->
hardware
[
0
]
?
config
->
hardware
:
(
cmd
->
hardware_plat
[
0
]
?
cmd
->
hardware_plat
:
nullptr
));
(
config
->
hardware_plat
[
0
]
?
config
->
hardware_plat
:
nullptr
));
if
(
suffix
==
nullptr
)
{
if
(
suffix
==
nullptr
)
{
LOGE
(
"Cannot determine fstab suffix!
\n
"
);
LOGE
(
"Cannot determine fstab suffix!
\n
"
);
return
;
return
;
...
@@ -241,7 +241,7 @@ void SARInit::first_stage_prep() {
...
@@ -241,7 +241,7 @@ void SARInit::first_stage_prep() {
string
tmp_dir
=
read_string
(
client
);
string
tmp_dir
=
read_string
(
client
);
chdir
(
tmp_dir
.
data
());
chdir
(
tmp_dir
.
data
());
int
cfg
=
xopen
(
INTLROOT
"/config"
,
O_WRONLY
|
O_CREAT
,
0
);
int
cfg
=
xopen
(
INTLROOT
"/config"
,
O_WRONLY
|
O_CREAT
,
0
);
xwrite
(
cfg
,
config
.
buf
,
config
.
sz
);
xwrite
(
cfg
,
magisk_config
.
buf
,
magisk_
config
.
sz
);
close
(
cfg
);
close
(
cfg
);
restore_folder
(
ROOTOVL
,
overlays
);
restore_folder
(
ROOTOVL
,
overlays
);
...
...
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