Hi,
I put here a bug among others:
------------------------- sys/kern/kern_exec.c -------------------------
char *pathbuf = NULL;
[...]
pathbuf = pool_get(&namei_pool, PR_WAITOK);
[...]
/* setup new registers and do misc. setup. */
if (pack.ep_emul->e_fixup != NULL) {
if ((*pack.ep_emul->e_fixup)(p, &pack) != 0)
goto free_pack_abort;
}
[...]
free_pack_abort:
free(pack.ep_hdr, M_EXEC, 0);
exit1(p, W_EXITCODE(0, SIGABRT), EXIT_NORMAL);
/* NOTREACHED */
atomic_clearbits_int(&pr->ps_flags, PS_INEXEC);
if (pathbuf != NULL)
pool_put(&namei_pool, pathbuf);
return (0);
}
------------------------------------------------------------------------
'pathbuf' is leaked.
This path being obviously reachable from userland, it is easy for a
local (un)privileged user to cause the kernel to run out of memory and
become unresponsive. OpenBSD 5.7 is affected, and quite certainly
previous releases.
Exploit here:
http://m00nbsd.net/garbage/OpenBSD_execve-DoS.txt
You can see with vmstat -m that the namei pool becomes enormous.
Found by The Brainy Code Scanner.
It is not the last bug Brainy has found, but it is the last one I
report. I don't have time for that.
Maxime