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
1c743839
Commit
1c743839
authored
Jan 10, 2018
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add MS_SILENT to xmount and cleanup function wraps
parent
bcae9dec
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
26 additions
and
44 deletions
+26
-44
daemon.c
core/jni/core/daemon.c
+5
-5
magiskinit.c
core/jni/core/magiskinit.c
+8
-8
utils.h
core/jni/include/utils.h
+2
-2
proc_monitor.c
core/jni/magiskhide/proc_monitor.c
+1
-3
file.c
core/jni/utils/file.c
+3
-3
img.c
core/jni/utils/img.c
+2
-2
misc.c
core/jni/utils/misc.c
+1
-1
xwrap.c
core/jni/utils/xwrap.c
+4
-20
No files found.
core/jni/core/daemon.c
View file @
1c743839
...
@@ -186,7 +186,7 @@ void daemon_init() {
...
@@ -186,7 +186,7 @@ void daemon_init() {
// Check whether skip_initramfs device
// Check whether skip_initramfs device
vec_for_each
(
&
mounts
,
line
)
{
vec_for_each
(
&
mounts
,
line
)
{
if
(
strstr
(
line
,
" /system_root "
))
{
if
(
strstr
(
line
,
" /system_root "
))
{
xmkdir
_p
(
MIRRDIR
"/system"
,
0755
);
xmkdir
s
(
MIRRDIR
"/system"
,
0755
);
bind_mount
(
"/system_root/system"
,
MIRRDIR
"/system"
);
bind_mount
(
"/system_root/system"
,
MIRRDIR
"/system"
);
skip_initramfs
=
1
;
skip_initramfs
=
1
;
break
;
break
;
...
@@ -195,7 +195,7 @@ void daemon_init() {
...
@@ -195,7 +195,7 @@ void daemon_init() {
vec_for_each
(
&
mounts
,
line
)
{
vec_for_each
(
&
mounts
,
line
)
{
if
(
!
skip_initramfs
&&
strstr
(
line
,
" /system "
))
{
if
(
!
skip_initramfs
&&
strstr
(
line
,
" /system "
))
{
sscanf
(
line
,
"%s"
,
buf
);
sscanf
(
line
,
"%s"
,
buf
);
xmkdir
_p
(
MIRRDIR
"/system"
,
0755
);
xmkdir
s
(
MIRRDIR
"/system"
,
0755
);
xmount
(
buf
,
MIRRDIR
"/system"
,
"ext4"
,
MS_RDONLY
,
NULL
);
xmount
(
buf
,
MIRRDIR
"/system"
,
"ext4"
,
MS_RDONLY
,
NULL
);
#ifdef MAGISK_DEBUG
#ifdef MAGISK_DEBUG
LOGI
(
"mount: %s -> %s
\n
"
,
buf
,
MIRRDIR
"/system"
);
LOGI
(
"mount: %s -> %s
\n
"
,
buf
,
MIRRDIR
"/system"
);
...
@@ -205,7 +205,7 @@ void daemon_init() {
...
@@ -205,7 +205,7 @@ void daemon_init() {
}
else
if
(
strstr
(
line
,
" /vendor "
))
{
}
else
if
(
strstr
(
line
,
" /vendor "
))
{
seperate_vendor
=
1
;
seperate_vendor
=
1
;
sscanf
(
line
,
"%s"
,
buf
);
sscanf
(
line
,
"%s"
,
buf
);
xmkdir
_p
(
MIRRDIR
"/vendor"
,
0755
);
xmkdir
s
(
MIRRDIR
"/vendor"
,
0755
);
xmount
(
buf
,
MIRRDIR
"/vendor"
,
"ext4"
,
MS_RDONLY
,
NULL
);
xmount
(
buf
,
MIRRDIR
"/vendor"
,
"ext4"
,
MS_RDONLY
,
NULL
);
#ifdef MAGISK_DEBUG
#ifdef MAGISK_DEBUG
LOGI
(
"mount: %s -> %s
\n
"
,
buf
,
MIRRDIR
"/vendor"
);
LOGI
(
"mount: %s -> %s
\n
"
,
buf
,
MIRRDIR
"/vendor"
);
...
@@ -224,11 +224,11 @@ void daemon_init() {
...
@@ -224,11 +224,11 @@ void daemon_init() {
LOGI
(
"link: %s
\n
"
,
MIRRDIR
"/vendor"
);
LOGI
(
"link: %s
\n
"
,
MIRRDIR
"/vendor"
);
#endif
#endif
}
}
xmkdir
_p
(
MIRRDIR
"/bin"
,
0755
);
xmkdir
s
(
MIRRDIR
"/bin"
,
0755
);
bind_mount
(
DATABIN
,
MIRRDIR
"/bin"
);
bind_mount
(
DATABIN
,
MIRRDIR
"/bin"
);
LOGI
(
"* Setting up internal busybox"
);
LOGI
(
"* Setting up internal busybox"
);
xmkdir
_p
(
BBPATH
,
0755
);
xmkdir
s
(
BBPATH
,
0755
);
exec_command_sync
(
MIRRDIR
"/bin/busybox"
,
"--install"
,
"-s"
,
BBPATH
,
NULL
);
exec_command_sync
(
MIRRDIR
"/bin/busybox"
,
"--install"
,
"-s"
,
BBPATH
,
NULL
);
xsymlink
(
MIRRDIR
"/bin/busybox"
,
BBPATH
"/busybox"
);
xsymlink
(
MIRRDIR
"/bin/busybox"
,
BBPATH
"/busybox"
);
}
}
...
...
core/jni/core/magiskinit.c
View file @
1c743839
...
@@ -77,7 +77,7 @@ static void parse_cmdline(struct cmdline *cmd) {
...
@@ -77,7 +77,7 @@ static void parse_cmdline(struct cmdline *cmd) {
char
cmdline
[
4096
];
char
cmdline
[
4096
];
mkdir
(
"/proc"
,
0555
);
mkdir
(
"/proc"
,
0555
);
mount
(
"proc"
,
"/proc"
,
"proc"
,
0
,
NULL
);
x
mount
(
"proc"
,
"/proc"
,
"proc"
,
0
,
NULL
);
int
fd
=
open
(
"/proc/cmdline"
,
O_RDONLY
|
O_CLOEXEC
);
int
fd
=
open
(
"/proc/cmdline"
,
O_RDONLY
|
O_CLOEXEC
);
cmdline
[
read
(
fd
,
cmdline
,
sizeof
(
cmdline
))]
=
'\0'
;
cmdline
[
read
(
fd
,
cmdline
,
sizeof
(
cmdline
))]
=
'\0'
;
close
(
fd
);
close
(
fd
);
...
@@ -455,7 +455,7 @@ int main(int argc, char *argv[]) {
...
@@ -455,7 +455,7 @@ int main(int argc, char *argv[]) {
frm_rf
(
root
);
frm_rf
(
root
);
mkdir
(
"/sys"
,
0755
);
mkdir
(
"/sys"
,
0755
);
mount
(
"sysfs"
,
"/sys"
,
"sysfs"
,
0
,
NULL
);
x
mount
(
"sysfs"
,
"/sys"
,
"sysfs"
,
0
,
NULL
);
char
partname
[
32
];
char
partname
[
32
];
snprintf
(
partname
,
sizeof
(
partname
),
"system%s"
,
cmd
.
slot
);
snprintf
(
partname
,
sizeof
(
partname
),
"system%s"
,
cmd
.
slot
);
...
@@ -464,20 +464,20 @@ int main(int argc, char *argv[]) {
...
@@ -464,20 +464,20 @@ int main(int argc, char *argv[]) {
setup_block
(
&
dev
,
partname
);
setup_block
(
&
dev
,
partname
);
mkdir
(
"/system_root"
,
0755
);
mkdir
(
"/system_root"
,
0755
);
mount
(
dev
.
path
,
"/system_root"
,
"ext4"
,
MS_RDONLY
,
NULL
);
x
mount
(
dev
.
path
,
"/system_root"
,
"ext4"
,
MS_RDONLY
,
NULL
);
int
system_root
=
open
(
"/system_root"
,
O_RDONLY
|
O_CLOEXEC
);
int
system_root
=
open
(
"/system_root"
,
O_RDONLY
|
O_CLOEXEC
);
// Exclude system folder
// Exclude system folder
excl_list
=
(
char
*
[])
{
"system"
,
NULL
};
excl_list
=
(
char
*
[])
{
"system"
,
NULL
};
clone_dir
(
system_root
,
root
);
clone_dir
(
system_root
,
root
);
mkdir
(
"/system"
,
0755
);
mkdir
(
"/system"
,
0755
);
mount
(
"/system_root/system"
,
"/system"
,
NULL
,
MS_BIND
,
NULL
);
x
mount
(
"/system_root/system"
,
"/system"
,
NULL
,
MS_BIND
,
NULL
);
snprintf
(
partname
,
sizeof
(
partname
),
"vendor%s"
,
cmd
.
slot
);
snprintf
(
partname
,
sizeof
(
partname
),
"vendor%s"
,
cmd
.
slot
);
// We need to mount independent vendor partition
// We need to mount independent vendor partition
if
(
setup_block
(
&
dev
,
partname
)
==
0
)
if
(
setup_block
(
&
dev
,
partname
)
==
0
)
mount
(
dev
.
path
,
"/vendor"
,
"ext4"
,
MS_RDONLY
,
NULL
);
x
mount
(
dev
.
path
,
"/vendor"
,
"ext4"
,
MS_RDONLY
,
NULL
);
close
(
system_root
);
close
(
system_root
);
}
else
{
}
else
{
...
@@ -515,13 +515,13 @@ int main(int argc, char *argv[]) {
...
@@ -515,13 +515,13 @@ int main(int argc, char *argv[]) {
if
(
patch_sepolicy
())
{
if
(
patch_sepolicy
())
{
/* Non skip_initramfs devices using separate sepolicy
/* Non skip_initramfs devices using separate sepolicy
* Mount /system and try to load again */
* Mount /system and try to load again */
mount
(
"sysfs"
,
"/sys"
,
"sysfs"
,
0
,
NULL
);
x
mount
(
"sysfs"
,
"/sys"
,
"sysfs"
,
0
,
NULL
);
struct
device
dev
;
struct
device
dev
;
setup_block
(
&
dev
,
"system"
);
setup_block
(
&
dev
,
"system"
);
mount
(
dev
.
path
,
"/system"
,
"ext4"
,
MS_RDONLY
,
NULL
);
x
mount
(
dev
.
path
,
"/system"
,
"ext4"
,
MS_RDONLY
,
NULL
);
// We need to mount independent vendor partition
// We need to mount independent vendor partition
if
(
setup_block
(
&
dev
,
"vendor"
)
==
0
)
if
(
setup_block
(
&
dev
,
"vendor"
)
==
0
)
mount
(
dev
.
path
,
"/vendor"
,
"ext4"
,
MS_RDONLY
,
NULL
);
x
mount
(
dev
.
path
,
"/vendor"
,
"ext4"
,
MS_RDONLY
,
NULL
);
patch_sepolicy
();
patch_sepolicy
();
...
...
core/jni/include/utils.h
View file @
1c743839
...
@@ -61,7 +61,7 @@ int xumount(const char *target);
...
@@ -61,7 +61,7 @@ int xumount(const char *target);
int
xumount2
(
const
char
*
target
,
int
flags
);
int
xumount2
(
const
char
*
target
,
int
flags
);
int
xrename
(
const
char
*
oldpath
,
const
char
*
newpath
);
int
xrename
(
const
char
*
oldpath
,
const
char
*
newpath
);
int
xmkdir
(
const
char
*
pathname
,
mode_t
mode
);
int
xmkdir
(
const
char
*
pathname
,
mode_t
mode
);
int
xmkdir
_p
(
const
char
*
pathname
,
mode_t
mode
);
int
xmkdir
s
(
const
char
*
pathname
,
mode_t
mode
);
int
xmkdirat
(
int
dirfd
,
const
char
*
pathname
,
mode_t
mode
);
int
xmkdirat
(
int
dirfd
,
const
char
*
pathname
,
mode_t
mode
);
void
*
xmmap
(
void
*
addr
,
size_t
length
,
int
prot
,
int
flags
,
void
*
xmmap
(
void
*
addr
,
size_t
length
,
int
prot
,
int
flags
,
int
fd
,
off_t
offset
);
int
fd
,
off_t
offset
);
...
@@ -101,7 +101,7 @@ struct file_attr {
...
@@ -101,7 +101,7 @@ struct file_attr {
};
};
int
fd_getpath
(
int
fd
,
char
*
path
,
size_t
size
);
int
fd_getpath
(
int
fd
,
char
*
path
,
size_t
size
);
int
mkdir
_p
(
const
char
*
pathname
,
mode_t
mode
);
int
mkdir
s
(
const
char
*
pathname
,
mode_t
mode
);
void
in_order_walk
(
int
dirfd
,
void
(
*
callback
)(
int
,
struct
dirent
*
));
void
in_order_walk
(
int
dirfd
,
void
(
*
callback
)(
int
,
struct
dirent
*
));
void
rm_rf
(
const
char
*
path
);
void
rm_rf
(
const
char
*
path
);
void
frm_rf
(
int
dirfd
);
void
frm_rf
(
int
dirfd
);
...
...
core/jni/magiskhide/proc_monitor.c
View file @
1c743839
...
@@ -68,10 +68,8 @@ static void store_zygote_ns(int pid) {
...
@@ -68,10 +68,8 @@ static void store_zygote_ns(int pid) {
}
}
static
void
lazy_unmount
(
const
char
*
mountpoint
)
{
static
void
lazy_unmount
(
const
char
*
mountpoint
)
{
if
(
umount2
(
mountpoint
,
MNT_DETACH
)
!=
-
1
)
if
(
x
umount2
(
mountpoint
,
MNT_DETACH
)
!=
-
1
)
LOGD
(
"hide_daemon: Unmounted (%s)
\n
"
,
mountpoint
);
LOGD
(
"hide_daemon: Unmounted (%s)
\n
"
,
mountpoint
);
else
LOGD
(
"hide_daemon: Unmount Failed (%s)
\n
"
,
mountpoint
);
}
}
static
void
hide_daemon
(
int
pid
,
int
ppid
)
{
static
void
hide_daemon
(
int
pid
,
int
ppid
)
{
...
...
core/jni/utils/file.c
View file @
1c743839
...
@@ -34,7 +34,7 @@ int fd_getpath(int fd, char *path, size_t size) {
...
@@ -34,7 +34,7 @@ int fd_getpath(int fd, char *path, size_t size) {
return
0
;
return
0
;
}
}
int
mkdir
_p
(
const
char
*
pathname
,
mode_t
mode
)
{
int
mkdir
s
(
const
char
*
pathname
,
mode_t
mode
)
{
char
*
path
=
strdup
(
pathname
),
*
p
;
char
*
path
=
strdup
(
pathname
),
*
p
;
errno
=
0
;
errno
=
0
;
for
(
p
=
path
+
1
;
*
p
;
++
p
)
{
for
(
p
=
path
+
1
;
*
p
;
++
p
)
{
...
@@ -107,7 +107,7 @@ void mv_f(const char *source, const char *destination) {
...
@@ -107,7 +107,7 @@ void mv_f(const char *source, const char *destination) {
struct
file_attr
a
;
struct
file_attr
a
;
if
(
S_ISDIR
(
st
.
st_mode
))
{
if
(
S_ISDIR
(
st
.
st_mode
))
{
xmkdir
_p
(
destination
,
st
.
st_mode
&
0777
);
xmkdir
s
(
destination
,
st
.
st_mode
&
0777
);
src
=
xopen
(
source
,
O_RDONLY
|
O_CLOEXEC
);
src
=
xopen
(
source
,
O_RDONLY
|
O_CLOEXEC
);
dest
=
xopen
(
destination
,
O_RDONLY
|
O_CLOEXEC
);
dest
=
xopen
(
destination
,
O_RDONLY
|
O_CLOEXEC
);
fclone_attr
(
src
,
dest
);
fclone_attr
(
src
,
dest
);
...
@@ -162,7 +162,7 @@ void cp_afc(const char *source, const char *destination) {
...
@@ -162,7 +162,7 @@ void cp_afc(const char *source, const char *destination) {
getattr
(
source
,
&
a
);
getattr
(
source
,
&
a
);
if
(
S_ISDIR
(
a
.
st
.
st_mode
))
{
if
(
S_ISDIR
(
a
.
st
.
st_mode
))
{
xmkdir
_p
(
destination
,
a
.
st
.
st_mode
&
0777
);
xmkdir
s
(
destination
,
a
.
st
.
st_mode
&
0777
);
src
=
xopen
(
source
,
O_RDONLY
|
O_CLOEXEC
);
src
=
xopen
(
source
,
O_RDONLY
|
O_CLOEXEC
);
dest
=
xopen
(
destination
,
O_RDONLY
|
O_CLOEXEC
);
dest
=
xopen
(
destination
,
O_RDONLY
|
O_CLOEXEC
);
fsetattr
(
dest
,
&
a
);
fsetattr
(
dest
,
&
a
);
...
...
core/jni/utils/img.c
View file @
1c743839
...
@@ -139,9 +139,9 @@ char *mount_image(const char *img, const char *target) {
...
@@ -139,9 +139,9 @@ char *mount_image(const char *img, const char *target) {
if
(
access
(
img
,
F_OK
)
==
-
1
)
if
(
access
(
img
,
F_OK
)
==
-
1
)
return
NULL
;
return
NULL
;
if
(
access
(
target
,
F_OK
)
==
-
1
)
{
if
(
access
(
target
,
F_OK
)
==
-
1
)
{
if
(
xmkdir
_p
(
target
,
0755
)
==
-
1
)
{
if
(
xmkdir
s
(
target
,
0755
)
==
-
1
)
{
xmount
(
NULL
,
"/"
,
NULL
,
MS_REMOUNT
,
NULL
);
xmount
(
NULL
,
"/"
,
NULL
,
MS_REMOUNT
,
NULL
);
xmkdir
_p
(
target
,
0755
);
xmkdir
s
(
target
,
0755
);
xmount
(
NULL
,
"/"
,
NULL
,
MS_REMOUNT
|
MS_RDONLY
,
NULL
);
xmount
(
NULL
,
"/"
,
NULL
,
MS_REMOUNT
|
MS_RDONLY
,
NULL
);
}
}
}
}
...
...
core/jni/utils/misc.c
View file @
1c743839
...
@@ -304,7 +304,7 @@ int switch_mnt_ns(int pid) {
...
@@ -304,7 +304,7 @@ int switch_mnt_ns(int pid) {
fd
=
xopen
(
mnt
,
O_RDONLY
);
fd
=
xopen
(
mnt
,
O_RDONLY
);
if
(
fd
<
0
)
return
1
;
if
(
fd
<
0
)
return
1
;
// Switch to its namespace
// Switch to its namespace
ret
=
setns
(
fd
,
0
);
ret
=
x
setns
(
fd
,
0
);
close
(
fd
);
close
(
fd
);
return
ret
;
return
ret
;
}
}
...
...
core/jni/utils/xwrap.c
View file @
1c743839
...
@@ -156,14 +156,6 @@ int xbind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) {
...
@@ -156,14 +156,6 @@ int xbind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) {
return
ret
;
return
ret
;
}
}
int
xconnect
(
int
sockfd
,
const
struct
sockaddr
*
addr
,
socklen_t
addrlen
)
{
int
ret
=
connect
(
sockfd
,
addr
,
addrlen
);
if
(
ret
==
-
1
)
{
PLOGE
(
"connect"
);
}
return
ret
;
}
int
xlisten
(
int
sockfd
,
int
backlog
)
{
int
xlisten
(
int
sockfd
,
int
backlog
)
{
int
ret
=
listen
(
sockfd
,
backlog
);
int
ret
=
listen
(
sockfd
,
backlog
);
if
(
ret
==
-
1
)
{
if
(
ret
==
-
1
)
{
...
@@ -229,14 +221,6 @@ int xpthread_create(pthread_t *thread, const pthread_attr_t *attr,
...
@@ -229,14 +221,6 @@ int xpthread_create(pthread_t *thread, const pthread_attr_t *attr,
return
errno
;
return
errno
;
}
}
int
xsocketpair
(
int
domain
,
int
type
,
int
protocol
,
int
sv
[
2
])
{
int
ret
=
socketpair
(
domain
,
type
,
protocol
,
sv
);
if
(
ret
==
-
1
)
{
PLOGE
(
"socketpair"
);
}
return
ret
;
}
int
xstat
(
const
char
*
pathname
,
struct
stat
*
buf
)
{
int
xstat
(
const
char
*
pathname
,
struct
stat
*
buf
)
{
int
ret
=
stat
(
pathname
,
buf
);
int
ret
=
stat
(
pathname
,
buf
);
if
(
ret
==
-
1
)
{
if
(
ret
==
-
1
)
{
...
@@ -292,7 +276,7 @@ int xsymlink(const char *target, const char *linkpath) {
...
@@ -292,7 +276,7 @@ int xsymlink(const char *target, const char *linkpath) {
int
xmount
(
const
char
*
source
,
const
char
*
target
,
int
xmount
(
const
char
*
source
,
const
char
*
target
,
const
char
*
filesystemtype
,
unsigned
long
mountflags
,
const
char
*
filesystemtype
,
unsigned
long
mountflags
,
const
void
*
data
)
{
const
void
*
data
)
{
int
ret
=
mount
(
source
,
target
,
filesystemtype
,
mountflags
,
data
);
int
ret
=
mount
(
source
,
target
,
filesystemtype
,
MS_SILENT
|
mountflags
,
data
);
if
(
ret
==
-
1
)
{
if
(
ret
==
-
1
)
{
PLOGE
(
"mount %s->%s"
,
source
,
target
);
PLOGE
(
"mount %s->%s"
,
source
,
target
);
}
}
...
@@ -331,10 +315,10 @@ int xmkdir(const char *pathname, mode_t mode) {
...
@@ -331,10 +315,10 @@ int xmkdir(const char *pathname, mode_t mode) {
return
ret
;
return
ret
;
}
}
int
xmkdir
_p
(
const
char
*
pathname
,
mode_t
mode
)
{
int
xmkdir
s
(
const
char
*
pathname
,
mode_t
mode
)
{
int
ret
=
mkdir
_p
(
pathname
,
mode
);
int
ret
=
mkdir
s
(
pathname
,
mode
);
if
(
ret
==
-
1
)
{
if
(
ret
==
-
1
)
{
PLOGE
(
"mkdir
_p
%s"
,
pathname
);
PLOGE
(
"mkdir
s
%s"
,
pathname
);
}
}
return
ret
;
return
ret
;
}
}
...
...
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