diff --git a/loader/src/common/daemon.c b/loader/src/common/daemon.c index 9910ef1..cf8ef5a 100644 --- a/loader/src/common/daemon.c +++ b/loader/src/common/daemon.c @@ -342,6 +342,14 @@ bool rezygiskd_update_mns(enum mount_namespace_state nms_state, char *buf, size_ return false; } + if (target_fd == 0) { + LOGE("Failed to get target fd"); + + close(fd); + + return false; + } + snprintf(buf, buf_size, "/proc/%u/fd/%u", target_pid, target_fd); close(fd); diff --git a/zygiskd/src/zygiskd.c b/zygiskd/src/zygiskd.c index 4fb02c0..1eac1c9 100644 --- a/zygiskd/src/zygiskd.c +++ b/zygiskd/src/zygiskd.c @@ -647,8 +647,17 @@ void zygiskd_start(char *restrict argv[]) { save_mns_fd(pid, Module, impl); } - uint32_t clean_namespace_fd = (uint32_t)save_mns_fd(pid, (enum MountNamespaceState)mns_state, impl); - ret = write_uint32_t(client_fd, clean_namespace_fd); + int clean_namespace_fd = save_mns_fd(pid, (enum MountNamespaceState)mns_state, impl); + if (clean_namespace_fd == -1) { + LOGE("Failed to save mount namespace fd for pid %d: %s\n", pid, strerror(errno)); + + ret = write_uint32_t(client_fd, (uint32_t)0); + ASSURE_SIZE_WRITE_BREAK("UpdateMountNamespace", "clean_namespace_fd", ret, sizeof(clean_namespace_fd)); + + break; + } + + ret = write_uint32_t(client_fd, (uint32_t)clean_namespace_fd); ASSURE_SIZE_WRITE_BREAK("UpdateMountNamespace", "clean_namespace_fd", ret, sizeof(clean_namespace_fd)); break;