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
8cc5f096
Commit
8cc5f096
authored
Dec 05, 2019
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Some minor changes
parent
474d6520
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
29 additions
and
54 deletions
+29
-54
early_mount.cpp
native/jni/init/early_mount.cpp
+20
-20
init.h
native/jni/init/init.h
+0
-1
selinux.cpp
native/jni/utils/selinux.cpp
+9
-33
No files found.
native/jni/init/early_mount.cpp
View file @
8cc5f096
...
@@ -20,13 +20,17 @@ struct devinfo {
...
@@ -20,13 +20,17 @@ struct devinfo {
static
vector
<
devinfo
>
dev_list
;
static
vector
<
devinfo
>
dev_list
;
static
char
partname
[
32
];
static
char
fstype
[
32
];
static
char
block_dev
[
64
];
static
void
parse_device
(
devinfo
*
dev
,
const
char
*
uevent
)
{
static
void
parse_device
(
devinfo
*
dev
,
const
char
*
uevent
)
{
dev
->
partname
[
0
]
=
'\0'
;
dev
->
partname
[
0
]
=
'\0'
;
parse_prop_file
(
uevent
,
[
=
](
string_view
key
,
string_view
value
)
->
bool
{
parse_prop_file
(
uevent
,
[
=
](
string_view
key
,
string_view
value
)
->
bool
{
if
(
key
==
"MAJOR"
)
if
(
key
==
"MAJOR"
)
dev
->
major
=
atoi
(
value
.
data
());
dev
->
major
=
parse_int
(
value
.
data
());
else
if
(
key
==
"MINOR"
)
else
if
(
key
==
"MINOR"
)
dev
->
minor
=
atoi
(
value
.
data
());
dev
->
minor
=
parse_int
(
value
.
data
());
else
if
(
key
==
"DEVNAME"
)
else
if
(
key
==
"DEVNAME"
)
strcpy
(
dev
->
devname
,
value
.
data
());
strcpy
(
dev
->
devname
,
value
.
data
());
else
if
(
key
==
"PARTNAME"
)
else
if
(
key
==
"PARTNAME"
)
...
@@ -53,7 +57,7 @@ static void collect_devices() {
...
@@ -53,7 +57,7 @@ static void collect_devices() {
closedir
(
dir
);
closedir
(
dir
);
}
}
static
dev_t
setup_block
(
c
onst
char
*
partname
,
c
har
*
block_dev
=
nullptr
)
{
static
dev_t
setup_block
(
char
*
block_dev
=
nullptr
)
{
if
(
dev_list
.
empty
())
if
(
dev_list
.
empty
())
collect_devices
();
collect_devices
();
for
(;;)
{
for
(;;)
{
...
@@ -84,15 +88,7 @@ static bool is_lnk(const char *name) {
...
@@ -84,15 +88,7 @@ static bool is_lnk(const char *name) {
return
S_ISLNK
(
st
.
st_mode
);
return
S_ISLNK
(
st
.
st_mode
);
}
}
void
BaseInit
::
cleanup
()
{
static
bool
read_dt_fstab
(
cmdline
*
cmd
,
const
char
*
name
)
{
// Unmount in reverse order
for
(
auto
&
p
:
reversed
(
mount_list
))
{
LOGD
(
"Unmount [%s]
\n
"
,
p
.
data
());
umount
(
p
.
data
());
}
}
bool
MagiskInit
::
read_dt_fstab
(
const
char
*
name
,
char
*
partname
,
char
*
fstype
)
{
char
path
[
128
];
char
path
[
128
];
int
fd
;
int
fd
;
sprintf
(
path
,
"%s/fstab/%s/dev"
,
cmd
->
dt_dir
,
name
);
sprintf
(
path
,
"%s/fstab/%s/dev"
,
cmd
->
dt_dir
,
name
);
...
@@ -112,18 +108,14 @@ bool MagiskInit::read_dt_fstab(const char *name, char *partname, char *fstype) {
...
@@ -112,18 +108,14 @@ bool MagiskInit::read_dt_fstab(const char *name, char *partname, char *fstype) {
return
false
;
return
false
;
}
}
static
char
partname
[
32
];
static
char
fstype
[
32
];
static
char
block_dev
[
64
];
#define link_root(name) \
#define link_root(name) \
if (is_lnk("/system_root" name)) \
if (is_lnk("/system_root" name)) \
cp_afc("/system_root" name, name)
cp_afc("/system_root" name, name)
#define mount_root(name) \
#define mount_root(name) \
if (!is_lnk("/" #name) && read_dt_fstab(
#name, partname, fstyp
e)) { \
if (!is_lnk("/" #name) && read_dt_fstab(
cmd, #nam
e)) { \
LOGD("Early mount " #name "\n"); \
LOGD("Early mount " #name "\n"); \
setup_block(
partname,
block_dev); \
setup_block(block_dev); \
xmkdir("/" #name, 0755); \
xmkdir("/" #name, 0755); \
xmount(block_dev, "/" #name, fstype, MS_RDONLY, nullptr); \
xmount(block_dev, "/" #name, fstype, MS_RDONLY, nullptr); \
mount_list.emplace_back("/" #name); \
mount_list.emplace_back("/" #name); \
...
@@ -151,7 +143,7 @@ void SARCompatInit::early_mount() {
...
@@ -151,7 +143,7 @@ void SARCompatInit::early_mount() {
LOGD
(
"Early mount system_root
\n
"
);
LOGD
(
"Early mount system_root
\n
"
);
sprintf
(
partname
,
"system%s"
,
cmd
->
slot
);
sprintf
(
partname
,
"system%s"
,
cmd
->
slot
);
setup_block
(
partname
,
block_dev
);
setup_block
(
block_dev
);
xmkdir
(
"/system_root"
,
0755
);
xmkdir
(
"/system_root"
,
0755
);
if
(
xmount
(
block_dev
,
"/system_root"
,
"ext4"
,
MS_RDONLY
,
nullptr
))
if
(
xmount
(
block_dev
,
"/system_root"
,
"ext4"
,
MS_RDONLY
,
nullptr
))
xmount
(
block_dev
,
"/system_root"
,
"erofs"
,
MS_RDONLY
,
nullptr
);
xmount
(
block_dev
,
"/system_root"
,
"erofs"
,
MS_RDONLY
,
nullptr
);
...
@@ -213,7 +205,7 @@ void SARInit::early_mount() {
...
@@ -213,7 +205,7 @@ void SARInit::early_mount() {
LOGD
(
"Early mount system_root
\n
"
);
LOGD
(
"Early mount system_root
\n
"
);
sprintf
(
partname
,
"system%s"
,
cmd
->
slot
);
sprintf
(
partname
,
"system%s"
,
cmd
->
slot
);
system_dev
=
setup_block
(
partname
);
system_dev
=
setup_block
();
xmkdir
(
"/system_root"
,
0755
);
xmkdir
(
"/system_root"
,
0755
);
if
(
xmount
(
"/dev/root"
,
"/system_root"
,
"ext4"
,
MS_RDONLY
,
nullptr
))
if
(
xmount
(
"/dev/root"
,
"/system_root"
,
"ext4"
,
MS_RDONLY
,
nullptr
))
xmount
(
"/dev/root"
,
"/system_root"
,
"erofs"
,
MS_RDONLY
,
nullptr
);
xmount
(
"/dev/root"
,
"/system_root"
,
"erofs"
,
MS_RDONLY
,
nullptr
);
...
@@ -245,3 +237,11 @@ void SecondStageInit::early_mount() {
...
@@ -245,3 +237,11 @@ void SecondStageInit::early_mount() {
switch_root
(
"/system_root"
);
switch_root
(
"/system_root"
);
}
}
void
BaseInit
::
cleanup
()
{
// Unmount in reverse order
for
(
auto
&
p
:
reversed
(
mount_list
))
{
LOGD
(
"Unmount [%s]
\n
"
,
p
.
data
());
umount
(
p
.
data
());
}
}
native/jni/init/init.h
View file @
8cc5f096
...
@@ -55,7 +55,6 @@ protected:
...
@@ -55,7 +55,6 @@ protected:
raw_data
self
;
raw_data
self
;
virtual
void
early_mount
()
=
0
;
virtual
void
early_mount
()
=
0
;
bool
read_dt_fstab
(
const
char
*
name
,
char
*
partname
,
char
*
fstype
);
bool
patch_sepolicy
(
const
char
*
file
=
"/sepolicy"
);
bool
patch_sepolicy
(
const
char
*
file
=
"/sepolicy"
);
public
:
public
:
MagiskInit
(
char
*
argv
[],
cmdline
*
cmd
)
:
BaseInit
(
argv
,
cmd
)
{};
MagiskInit
(
char
*
argv
[],
cmdline
*
cmd
)
:
BaseInit
(
argv
,
cmd
)
{};
...
...
native/jni/utils/selinux.cpp
View file @
8cc5f096
...
@@ -55,61 +55,37 @@ static int __setcon(const char *ctx) {
...
@@ -55,61 +55,37 @@ static int __setcon(const char *ctx) {
static
int
__getfilecon
(
const
char
*
path
,
char
**
ctx
)
{
static
int
__getfilecon
(
const
char
*
path
,
char
**
ctx
)
{
char
buf
[
1024
];
char
buf
[
1024
];
int
rc
=
syscall
(
__NR_getxattr
,
path
,
XATTR_NAME_SELINUX
,
buf
,
sizeof
(
buf
)
-
1
);
int
rc
=
syscall
(
__NR_getxattr
,
path
,
XATTR_NAME_SELINUX
,
buf
,
sizeof
(
buf
)
-
1
);
if
(
rc
<
0
)
{
if
(
rc
==
0
)
errno
=
-
rc
;
*
ctx
=
strdup
(
buf
);
return
-
1
;
}
*
ctx
=
strdup
(
buf
);
return
rc
;
return
rc
;
}
}
static
int
__lgetfilecon
(
const
char
*
path
,
char
**
ctx
)
{
static
int
__lgetfilecon
(
const
char
*
path
,
char
**
ctx
)
{
char
buf
[
1024
];
char
buf
[
1024
];
int
rc
=
syscall
(
__NR_lgetxattr
,
path
,
XATTR_NAME_SELINUX
,
buf
,
sizeof
(
buf
)
-
1
);
int
rc
=
syscall
(
__NR_lgetxattr
,
path
,
XATTR_NAME_SELINUX
,
buf
,
sizeof
(
buf
)
-
1
);
if
(
rc
<
0
)
{
if
(
rc
==
0
)
errno
=
-
rc
;
*
ctx
=
strdup
(
buf
);
return
-
1
;
}
*
ctx
=
strdup
(
buf
);
return
rc
;
return
rc
;
}
}
static
int
__fgetfilecon
(
int
fd
,
char
**
ctx
)
{
static
int
__fgetfilecon
(
int
fd
,
char
**
ctx
)
{
char
buf
[
1024
];
char
buf
[
1024
];
int
rc
=
syscall
(
__NR_fgetxattr
,
fd
,
XATTR_NAME_SELINUX
,
buf
,
sizeof
(
buf
)
-
1
);
int
rc
=
syscall
(
__NR_fgetxattr
,
fd
,
XATTR_NAME_SELINUX
,
buf
,
sizeof
(
buf
)
-
1
);
if
(
rc
<
0
)
{
if
(
rc
==
0
)
errno
=
-
rc
;
*
ctx
=
strdup
(
buf
);
return
-
1
;
}
*
ctx
=
strdup
(
buf
);
return
rc
;
return
rc
;
}
}
static
int
__setfilecon
(
const
char
*
path
,
const
char
*
ctx
)
{
static
int
__setfilecon
(
const
char
*
path
,
const
char
*
ctx
)
{
int
rc
=
syscall
(
__NR_setxattr
,
path
,
XATTR_NAME_SELINUX
,
ctx
,
strlen
(
ctx
)
+
1
,
0
);
return
syscall
(
__NR_setxattr
,
path
,
XATTR_NAME_SELINUX
,
ctx
,
strlen
(
ctx
)
+
1
,
0
);
if
(
rc
)
{
errno
=
-
rc
;
return
-
1
;
}
return
0
;
}
}
static
int
__lsetfilecon
(
const
char
*
path
,
const
char
*
ctx
)
{
static
int
__lsetfilecon
(
const
char
*
path
,
const
char
*
ctx
)
{
int
rc
=
syscall
(
__NR_lsetxattr
,
path
,
XATTR_NAME_SELINUX
,
ctx
,
strlen
(
ctx
)
+
1
,
0
);
return
syscall
(
__NR_lsetxattr
,
path
,
XATTR_NAME_SELINUX
,
ctx
,
strlen
(
ctx
)
+
1
,
0
);
if
(
rc
)
{
errno
=
-
rc
;
return
-
1
;
}
return
0
;
}
}
static
int
__fsetfilecon
(
int
fd
,
const
char
*
ctx
)
{
static
int
__fsetfilecon
(
int
fd
,
const
char
*
ctx
)
{
int
rc
=
syscall
(
__NR_fsetxattr
,
fd
,
XATTR_NAME_SELINUX
,
ctx
,
strlen
(
ctx
)
+
1
,
0
);
return
syscall
(
__NR_fsetxattr
,
fd
,
XATTR_NAME_SELINUX
,
ctx
,
strlen
(
ctx
)
+
1
,
0
);
if
(
rc
)
{
errno
=
-
rc
;
return
-
1
;
}
return
0
;
}
}
// Function pointers
// Function pointers
...
...
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