/*
 * DF-2799 marker #2: a single jail(2) call.  On the deadlocked kernel
 * this blocks forever acquiring jail_lock in sys_jail (kern_jail.c:275)
 * -> `timeout N ./jailonce` exits 124.  On a healthy/patched kernel it
 * jails the process and exits 0 immediately.
 */
#include <sys/param.h>
#include <sys/jail.h>
#include <sys/syscall.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>

int
main(void)
{
	struct jail j;
	int jid;

	memset(&j, 0, sizeof(j));
	j.version = 1;
	j.path = "/tmp";
	j.hostname = "jailonce";
	j.n_ips = 0;
	j.ips = NULL;
	jid = syscall(SYS_jail, &j);
	if (jid < 0) {
		printf("jailonce: jail() failed: %s\n", strerror(errno));
		return (1);
	}
	printf("jailonce: jailed jid=%d\n", jid);
	return (0);
}
