#454·toaruos

正确处理来自线程进程的 `exec*`

作者: klange创建于 2026年5月1日更新于 2026年5月1日

当从多线程进程调用 `exec` 族时,所有线程都应该终止 - 整个进程都应该被替换。 目前,我们处于一个奇怪的状态,其中调用 `exec` 的线程获得了新的页目录,但仍保留了对原始文件描述符表的引用,而其他所有线程都继续存在,这可能导致某个线程能够引用新执行的"进程"打开的文件描述符项,以及可能出现的其他问题。 在某个 CTF 竞赛中看到的一个漏洞(遗憾的是,这里没有报告此问题)涉及在一个线程中执行 `sudo`,之后其他挂起的线程可以从 `sudo` 打开的文件描述符中读取数据,例如 `/etc/master.passwd` 的文件描述符。 除了终止线程外,我们还应该确保"存活"的线程是主线程(线程组领导者),无论哪个线程实际调用了 `exec`,尽管我们确实存在与父/子关系相关的其他线程问题,也需要解决。