| 94 | } |
| 95 | |
| 96 | bool HaveCapSysPtrace() { |
| 97 | __user_cap_header_struct cap_header; |
| 98 | cap_header.pid = getpid(); |
| 99 | cap_header.version = _LINUX_CAPABILITY_VERSION_3; |
| 100 | |
| 101 | __user_cap_data_struct cap_data[_LINUX_CAPABILITY_U32S_3]; |
| 102 | if (syscall(SYS_capget, &cap_header, &cap_data) != 0) { |
| 103 | PLOG(ERROR) << "capget"; |
| 104 | LOG_IF(ERROR, errno == EINVAL) << "cap_header.version " << std::hex |
| 105 | << cap_header.version; |
| 106 | return false; |
| 107 | } |
| 108 | |
| 109 | return (cap_data[CAP_TO_INDEX(CAP_SYS_PTRACE)].effective & |
| 110 | CAP_TO_MASK(CAP_SYS_PTRACE)) != 0; |
| 111 | } |
| 112 | |
| 113 | bool SendMessageToClient( |
| 114 | int client_sock, |