Tue, May 5
Use the last instead of the first match (per jail) to enable dynamic configuration.
Mon, May 4
Make dynamic (aka executable) jail.conf opt-in via the already parsed partial jail.conf.
Sat, May 2
Wed, Apr 29
Tue, Apr 28
I had hoped to attend the jail user call today to be able to discuss this, but the Discord event has it an hour off and I didn't discover the authoritative source @ callfortesting.org until I was wondering why nobody was showing up. *deep sigh*
New attempt with git format-patch -U999999 *sigh*.
Sun, Apr 26
Since Phabricator ignores my attempts to update this review to modify multiple files with the diff I created a GitHub pull request at https://github.com/freebsd/freebsd-src/pull/2164 .
Try to copy and paste the patch instead of uploading as a file. Sorry for the noise.
For some reason Phabricator doesn't register that I edited two additional files in the latest patch I uploaded and the raw diff doesn't include them either?!?
Second attempt to update the other source files too.
Use the parser's existing stack of nested jails instead of incorrectly assuming the last jail parsed is also the current jail. This incorrect assumption is not true after one or more jail blocks have been closed and no new jail block has been opened.
As discussed putting this feature behind a paranoia flag to not cause issues for anyone that just happens to have an accidentally executable jail.conf(5) makes it effectively useless.
Reformatted the code to 80 columns.
Reformat the code to 80 columns.
Sat, Apr 25
Switch to single line comments inside the open_file() function.
Use single line comments in open_file() where appropriate.
Replace fexecve(2) with execve(2) since fexecve(2) doesn't work with (shell) scripts unless /dev/fd is mounted with the non-standard "nodup" option.
Use normal pointer syntax for the pid pointer instead of pid_t pid[static 1].
Feb 11 2026
Jan 15 2026
Jan 14 2026
Thank you!
- Use jexec_args variable with all parameters in both getopt calls.
- Add missing error handling for putenv(3).
- Avoid memory allocations.
- Parse -e twice. Once to verify correctness. Again to set the variable.
Why does it matter that putenv(3) doesn't create a copy?
Align putenv_copy() function declaration for consistency.
Since putenv(3) does not create a copy, I had to implement a function to emulate the old behavior, so now setenv(3) is used after parsing the environment variable.
Jan 12 2026
Jan 11 2026
Dec 29 2025
Aug 26 2025
Aug 12 2025
Jul 22 2025
Document new -x flag in jail(8).
Jul 17 2025
I had considered that the -l (exec clean) flag should be considered, but decided it really only makes sense for keeping the jail environment clean.
Jul 12 2025
Put the executable jail.conf(5) behind the -x option (as chicken bit).
Feb 27 2025
I vastly under appreciated that folks rely upon the ng_eiface not moving with the struct ifnet. Probably because I've been using them in jails for over a decade and only recently noticed myself.
