内核的 __ptrace_may_access() 通过任务的 mm 结构体内容判定一个进程是否有权限 ptrace 另一个进程, 但 exit_mm() 析构一个进程时会将 task.mm 置为 NULL, 此时 __ptrace_may_access() 会跳过该检查,但仍然会检查 uid/gid 一致性
选用 drop privilege 前会打开受限文件,且至析构时不关闭之的 victim,利用依赖 __ptrace_may_access() 进行权限检查的 pidfd_getfd() race 进程退出时 mm 置为空而 fd 尚未清空的时机,成功时即可得到敏感文件的 fd。