mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-22 07:57:39 +00:00
Use pidfd in more senarios
This commit is contained in:
parent
2f710a564f
commit
d6e159bff9
@ -2,6 +2,7 @@
|
||||
#include <string>
|
||||
#include <cinttypes>
|
||||
#include <android/log.h>
|
||||
#include <sys/syscall.h>
|
||||
|
||||
#include <base.hpp>
|
||||
|
||||
@ -190,18 +191,27 @@ static void process_events_buffer(struct log_msg *msg) {
|
||||
}
|
||||
|
||||
char path[16];
|
||||
ssprintf(path, sizeof(path), "/proc/%d", pid);
|
||||
struct stat st{};
|
||||
sprintf(path, "/proc/%d", pid);
|
||||
int fd = syscall(__NR_pidfd_open, pid, 0);
|
||||
if (fd > 0 && setns(fd, CLONE_NEWNS) == 0) {
|
||||
pid = getpid();
|
||||
} else {
|
||||
close(fd);
|
||||
fd = -1;
|
||||
}
|
||||
while (read_ns(pid, &st) == 0 && it->second.st_ino == st.st_ino) {
|
||||
if (stat(path, &st) == 0 && st.st_uid == 0) {
|
||||
usleep(10 * 1000);
|
||||
} else {
|
||||
LOGW("logcat: skip [%.*s] PID=[%d] UID=[%d]; namespace not isolated\n",
|
||||
LOGW("logcat: skip [%.*s] PID=[%s] UID=[%d]; namespace not isolated\n",
|
||||
(int) proc.length(), proc.data(),
|
||||
pid, am_proc_start->uid.data);
|
||||
path + 6, am_proc_start->uid.data);
|
||||
_exit(0);
|
||||
}
|
||||
if (fd > 0) setns(fd, CLONE_NEWNS);
|
||||
}
|
||||
close(fd);
|
||||
|
||||
LOGI("logcat: revert [%.*s] PID=[%d] UID=[%d]\n",
|
||||
(int) proc.length(), proc.data(), pid, am_proc_start->uid.data);
|
||||
|
Loading…
x
Reference in New Issue
Block a user