static void pr_ipc_desc_entry(unsigned int loglevel, const IpcDescEntry *desc) { print_on_level(loglevel, "id: %-10d key: 0x%08x ", desc->id, desc->key); print_on_level(loglevel, "uid: %-10d gid: %-10d ", desc->uid, desc->gid); print_on_level(loglevel, "cuid: %-10d cgid: %-10d ", desc->cuid, desc->cgid); print_on_level(loglevel, "mode: %-10o ", desc->mode); }
void pr_vma(unsigned int loglevel, const struct vma_area *vma_area) { if (!vma_area) return; print_on_level(loglevel, "s: 0x%16"PRIx64" e: 0x%16"PRIx64" l: %8"PRIu64"K p: 0x%8x f: 0x%8x pg: 0x%8"PRIx64" " "vf: %s st: %s spc: %-8s shmid: 0x%8"PRIx64"\n", vma_area->vma.start, vma_area->vma.end, KBYTES(vma_area_len(vma_area)), vma_area->vma.prot, vma_area->vma.flags, vma_area->vma.pgoff, vma_area->vm_file_fd < 0 ? "n" : "y", !vma_area->vma.status ? "--" : ((vma_area->vma.status & VMA_FILE_PRIVATE) ? "FP" : ((vma_area->vma.status & VMA_FILE_SHARED) ? "FS" : ((vma_area->vma.status & VMA_ANON_SHARED) ? "AS" : ((vma_area->vma.status & VMA_ANON_PRIVATE) ? "AP" : "--")))), !vma_area->vma.status ? "--" : ((vma_area->vma.status & VMA_AREA_STACK) ? "stack" : ((vma_area->vma.status & VMA_AREA_HEAP) ? "heap" : ((vma_area->vma.status & VMA_AREA_VSYSCALL) ? "vsyscall" : ((vma_area->vma.status & VMA_AREA_VDSO) ? "vdso" : "n")))), vma_area->vma.shmid); }
static void pr_info_ipc_sem_entry(const IpcSemEntry *sem) { pr_ipc_desc_entry(LOG_INFO, sem->desc); print_on_level(LOG_INFO, "nsems: %-10d\n", sem->nsems); }
static void pr_ipc_sem_array(unsigned int loglevel, int nr, u16 *values) { while (nr--) print_on_level(loglevel, " %-5d", values[nr]); print_on_level(loglevel, "\n"); }
static void pr_info_ipc_shm(const IpcShmEntry *shm) { pr_ipc_desc_entry(LOG_INFO, shm->desc); print_on_level(LOG_INFO, "size: %-10"PRIu64"\n", shm->size); }
static void pr_info_ipc_msg_entry(const IpcMsgEntry *msg) { pr_ipc_desc_entry(LOG_INFO, msg->desc); print_on_level(LOG_INFO, "qbytes: %-10d qnum: %-10d\n", msg->qbytes, msg->qnum); }
static void pr_info_ipc_msg(int nr, const IpcMsg *msg) { print_on_level(LOG_INFO, " %-5d: type: %-20"PRId64" size: %-10d\n", nr++, msg->mtype, msg->msize); }
int cr_check(void) { struct ns_id ns = { .type = NS_CRIU, .ns_pid = PROC_SELF, .nd = &mnt_ns_desc }; int ret = 0; if (!is_root_user()) return -1; root_item = alloc_pstree_item(); if (root_item == NULL) return -1; root_item->pid.real = getpid(); if (collect_pstree_ids()) return -1; ns.id = root_item->ids->mnt_ns_id; mntinfo = collect_mntinfo(&ns, false); if (mntinfo == NULL) return -1; if (chk_feature) { ret = chk_feature(); goto out; } ret |= check_map_files(); ret |= check_sock_diag(); ret |= check_ns_last_pid(); ret |= check_sock_peek_off(); ret |= check_kcmp(); ret |= check_prctl(); ret |= check_fcntl(); ret |= check_proc_stat(); ret |= check_tcp(); ret |= check_fdinfo_ext(); ret |= check_unaligned_vmsplice(); ret |= check_tty(); ret |= check_so_gets(); ret |= check_ipc(); ret |= check_sigqueuinfo(); ret |= check_ptrace_peeksiginfo(); ret |= check_ptrace_suspend_seccomp(); ret |= check_ptrace_dump_seccomp_filters(); ret |= check_mem_dirty_track(); ret |= check_posix_timers(); ret |= check_tun_cr(0); ret |= check_timerfd(); ret |= check_mnt_id(); ret |= check_aio_remap(); ret |= check_fdinfo_lock(); ret |= check_clone_parent_vs_pid(); out: if (!ret) print_on_level(DEFAULT_LOGLEVEL, "Looks good.\n"); return ret; }