FreeBSD/sys/kern/kern_exec.c
/*
 * XXX: kern_execve has the astonishing property of not always returning to
 * the caller.  If sufficiently bad things happen during the call to
 * do_execve(), it can end up calling exit1(); as a result, callers must
 * avoid doing anything which they might need to undo (e.g., allocating
 * memory).
 */
kern_execve has the astonishing property of not always returning to
the caller.  If sufficiently bad things happen during the call to
do_execve(), it can end up calling exit1(); as a result, callers must
avoid doing anything which they might need to undo .
kern_execve has the astonishing property of not always returning to the caller . If sufficiently bad things happen during the call to do_execve () it can end up calling exit1 () ; as a result callers must avoid doing anything which they might need to undo .
int
kern_execve(struct thread *td, struct image_args *args, struct mac *mac_p)
{
	AUDIT_ARG_ARGV(args->begin_argv, args->argc,
	    args->begin_envv - args->begin_argv);
	AUDIT_ARG_ENVV(args->begin_envv, args->envc,
	    args->endp - args->begin_envv);
	return (do_execve(td, args, mac_p));
}
int kern_execve ( struct thread * td , struct image_args * args , struct mac * mac_p ) { AUDIT_ARG_ARGV ( args -> begin_argv , args -> argc , args -> begin_envv - args -> begin_argv ) ; AUDIT_ARG_ENVV ( args -> begin_envv , args -> envc , args -> endp - args -> begin_envv ) ; return ( do_execve ( td , args , mac_p ) ) ; }
XXX: kern_execve has the astonishing property of not always returning to
 the caller.
XXX : kern_execve has the astonishing property of not always returning to the caller .