Skip same mount namespace

This commit is contained in:
vvb2060 2019-02-17 01:34:37 +08:00 committed by John Wu
parent c08b0d4974
commit 5b54ef840a

View File

@ -59,9 +59,6 @@ static inline void lazy_unmount(const char* mountpoint) {
LOGD("hide_daemon: Unmounted (%s)\n", mountpoint); LOGD("hide_daemon: Unmounted (%s)\n", mountpoint);
} }
/* APK monitoring doesn't seem to require checking namespace
* separation from PPID. Preserve this function just in case */
#if 0
static inline int parse_ppid(const int pid) { static inline int parse_ppid(const int pid) {
char path[32]; char path[32];
int ppid; int ppid;
@ -77,7 +74,6 @@ static inline int parse_ppid(const int pid) {
return ppid; return ppid;
} }
#endif
static bool is_snet(const int pid) { static bool is_snet(const int pid) {
char path[32]; char path[32];
@ -144,11 +140,15 @@ static bool process_pid(int pid) {
if (pid <= 1000) if (pid <= 1000)
return true; return true;
struct stat ns; struct stat ns, pns;
int ppid = parse_ppid(pid);
int uid = get_uid(pid); int uid = get_uid(pid);
if (hide_uid.count(uid)) { if (hide_uid.count(uid)) {
// Make sure we can read mount namespace // Make sure we can read mount namespace
if (read_ns(pid, &ns)) if (read_ns(pid, &ns) || read_ns(ppid, &pns))
return true;
// mount namespace is not separated, we only unmount once
if (ns.st_dev == pns.st_dev && ns.st_ino == pns.st_ino)
return true; return true;
// Check if it's a process we haven't already hijacked // Check if it's a process we haven't already hijacked