strp              278 dev/systrace.c 	struct str_process *strp;
strp              338 dev/systrace.c 		strp = systrace_findpid(fst, pid);
strp              339 dev/systrace.c 		if (strp == NULL) {
strp              355 dev/systrace.c 		ret = systrace_detach(strp);
strp              358 dev/systrace.c 		SET(strp->flags, STR_PROC_REPORT);
strp              361 dev/systrace.c 		ret = systrace_answer(strp, (struct systrace_answer *)data);
strp              364 dev/systrace.c 		ret = systrace_io(strp, (struct systrace_io *)data);
strp              367 dev/systrace.c 		ret = systrace_setscriptname(strp,
strp              371 dev/systrace.c 		ret = systrace_prepinject(strp, (struct systrace_inject *)data);
strp              377 dev/systrace.c 		ret = systrace_preprepl(strp, (struct systrace_replace *)data);
strp              399 dev/systrace.c 		ret = systrace_getcwd(fst, strp);
strp              462 dev/systrace.c 	struct str_process *strp;
strp              470 dev/systrace.c 	for (strp = TAILQ_FIRST(&fst->processes); strp;
strp              471 dev/systrace.c 	    strp = TAILQ_FIRST(&fst->processes)) {
strp              472 dev/systrace.c 		struct proc *q = strp->proc;
strp              474 dev/systrace.c 		systrace_detach(strp);
strp              479 dev/systrace.c 	for (strp = TAILQ_FIRST(&fst->messages); strp;
strp              480 dev/systrace.c 	    strp = TAILQ_FIRST(&fst->messages)) {
strp              481 dev/systrace.c 		TAILQ_REMOVE(&fst->messages, strp, msg_next);
strp              482 dev/systrace.c 		pool_put(&systr_proc_pl, strp);
strp              615 dev/systrace.c systrace_find(struct str_process *strp)
strp              619 dev/systrace.c 	if ((proc = pfind(strp->pid)) == NULL)
strp              622 dev/systrace.c 	if (proc != strp->proc)
strp              634 dev/systrace.c 	struct str_process *strp;
strp              638 dev/systrace.c 	strp = proc->p_systrace;
strp              639 dev/systrace.c 	if (strp != NULL) {
strp              640 dev/systrace.c 		fst = strp->parent;
strp              645 dev/systrace.c 		systrace_msg_child(fst, strp, -1);
strp              647 dev/systrace.c 		systrace_detach(strp);
strp              657 dev/systrace.c 	struct str_process *oldstrp, *strp;
strp              673 dev/systrace.c 	if ((strp = systrace_findpid(fst, p->p_pid)) == NULL)
strp              677 dev/systrace.c 	if ((strp->policy = oldstrp->policy) != NULL)
strp              678 dev/systrace.c 		strp->policy->refcount++;
strp              688 dev/systrace.c 	strp = p->p_systrace; \
strp              689 dev/systrace.c 	if (strp == NULL) { \
strp              693 dev/systrace.c 	fst = strp->parent; \
strp              702 dev/systrace.c 	struct str_process *strp;
strp              712 dev/systrace.c 	strp = p->p_systrace;
strp              713 dev/systrace.c 	if (strp == NULL) {
strp              723 dev/systrace.c 	KASSERT(strp->proc == p);
strp              725 dev/systrace.c 	fst = strp->parent;
strp              750 dev/systrace.c 		if ((strpolicy = strp->policy) == NULL)
strp              770 dev/systrace.c 		systrace_replacefree(strp);
strp              782 dev/systrace.c 	systrace_inject(strp, 0 /* Just reset internal state */);
strp              783 dev/systrace.c 	strp->sg = stackgap_init(p->p_emul);
strp              786 dev/systrace.c 	error = systrace_msg_ask(fst, strp, code, callp->sy_argsize, v);
strp              794 dev/systrace.c 	if ((strp = p->p_systrace) == NULL) {
strp              799 dev/systrace.c 	fst = strp->parent;
strp              803 dev/systrace.c 	if (strp->answer == SYSTR_POLICY_NEVER) {
strp              804 dev/systrace.c 		error = strp->error;
strp              805 dev/systrace.c 		systrace_replacefree(strp);
strp              809 dev/systrace.c 	if (ISSET(strp->flags, STR_PROC_SYSCALLRES)) {
strp              810 dev/systrace.c 		CLR(strp->flags, STR_PROC_SYSCALLRES);
strp              814 dev/systrace.c 	error = systrace_inject(strp, 1/* Perform copies */);
strp              816 dev/systrace.c 	if (!error && strp->replace != NULL)
strp              817 dev/systrace.c 		error = systrace_replace(strp, callp->sy_argsize, v);
strp              828 dev/systrace.c 		if (ISSET(strp->flags, STR_PROC_SETEUID))
strp              829 dev/systrace.c 			strp->saveuid = systrace_seteuid(p, strp->seteuid);
strp              830 dev/systrace.c 		if (ISSET(strp->flags, STR_PROC_SETEGID))
strp              831 dev/systrace.c 			strp->savegid = systrace_setegid(p, strp->setegid);
strp              833 dev/systrace.c 		CLR(strp->flags, STR_PROC_SETEUID|STR_PROC_SETEGID);
strp              841 dev/systrace.c 	if ((strp = p->p_systrace) == NULL) {
strp              847 dev/systrace.c 		if (ISSET(strp->flags, STR_PROC_SETEUID)) {
strp              848 dev/systrace.c 			if (pc->pc_ucred->cr_uid == strp->seteuid)
strp              849 dev/systrace.c 				systrace_seteuid(p, strp->saveuid);
strp              850 dev/systrace.c 			CLR(strp->flags, STR_PROC_SETEUID);
strp              852 dev/systrace.c 		if (ISSET(strp->flags, STR_PROC_SETEGID)) {
strp              853 dev/systrace.c 			if (pc->pc_ucred->cr_gid == strp->setegid)
strp              854 dev/systrace.c 				systrace_setegid(p, strp->savegid);
strp              855 dev/systrace.c 			CLR(strp->flags, STR_PROC_SETEGID);
strp              859 dev/systrace.c 	systrace_replacefree(strp);
strp              862 dev/systrace.c 		if ((fst = strp->parent) == NULL || !fst->issuser) {
strp              871 dev/systrace.c 	if (ISSET(strp->flags, STR_PROC_REPORT)) {
strp              872 dev/systrace.c 		CLR(strp->flags, STR_PROC_REPORT);
strp              877 dev/systrace.c 	fst = strp->parent;
strp              883 dev/systrace.c 		if (strp->policy) {
strp              884 dev/systrace.c 			systrace_closepolicy(fst, strp->policy);
strp              885 dev/systrace.c 			strp->policy = NULL;
strp              887 dev/systrace.c 		systrace_msg_emul(fst, strp);
strp              895 dev/systrace.c 		systrace_msg_ugid(fst, strp);
strp              902 dev/systrace.c 		systrace_msg_result(fst, strp, error, code,
strp              956 dev/systrace.c systrace_answer(struct str_process *strp, struct systrace_answer *ans)
strp              969 dev/systrace.c 	if (ans->stra_seqnr != strp->seqnr) {
strp              974 dev/systrace.c 	if ((error = systrace_processready(strp)) != 0)
strp              977 dev/systrace.c 	strp->answer = ans->stra_policy;
strp              978 dev/systrace.c 	strp->error = ans->stra_error;
strp              979 dev/systrace.c 	if (!strp->error)
strp              980 dev/systrace.c 		strp->error = EPERM;
strp              982 dev/systrace.c 		SET(strp->flags, STR_PROC_SYSCALLRES);
strp              986 dev/systrace.c 		SET(strp->flags, STR_PROC_SETEUID);
strp              987 dev/systrace.c 		strp->seteuid = ans->stra_seteuid;
strp              990 dev/systrace.c 		SET(strp->flags, STR_PROC_SETEGID);
strp              991 dev/systrace.c 		strp->setegid = ans->stra_setegid;
strp              995 dev/systrace.c 	CLR(strp->flags, STR_PROC_WAITANSWER);
strp              996 dev/systrace.c 	wakeup(strp);
strp             1003 dev/systrace.c systrace_setscriptname(struct str_process *strp, struct systrace_scriptname *ans)
strp             1005 dev/systrace.c 	strlcpy(strp->scriptname,
strp             1006 dev/systrace.c 	    ans->sn_scriptname, sizeof(strp->scriptname));
strp             1012 dev/systrace.c systrace_inject(struct str_process *strp, int docopy)
strp             1016 dev/systrace.c 	for (ind = 0; ind < strp->injectind; ind++) {
strp             1017 dev/systrace.c 		struct str_inject *inject = &strp->injects[ind];
strp             1024 dev/systrace.c 	strp->injectind = 0;
strp             1029 dev/systrace.c systrace_prepinject(struct str_process *strp, struct systrace_inject *inj)
strp             1035 dev/systrace.c 	if (strp->injectind >= SYSTR_MAXINJECTS)
strp             1038 dev/systrace.c 	udata = stackgap_alloc(&strp->sg, inj->stri_len);
strp             1054 dev/systrace.c 	inject = &strp->injects[strp->injectind++];
strp             1066 dev/systrace.c 	struct str_process *strp;
strp             1090 dev/systrace.c 		strp = systrace_findpid(fst, pol->strp_pid);
strp             1091 dev/systrace.c 		if (strp == NULL)
strp             1095 dev/systrace.c 		if (strpol->emul && strpol->emul != strp->proc->p_emul)
strp             1098 dev/systrace.c 		if (strp->policy)
strp             1099 dev/systrace.c 			systrace_closepolicy(fst, strp->policy);
strp             1100 dev/systrace.c 		strp->policy = strpol;
strp             1109 dev/systrace.c 			strpol->emul = strp->proc->p_emul;
strp             1134 dev/systrace.c systrace_processready(struct str_process *strp)
strp             1136 dev/systrace.c 	if (ISSET(strp->flags, STR_PROC_ONQUEUE))
strp             1139 dev/systrace.c 	if (!ISSET(strp->flags, STR_PROC_WAITANSWER))
strp             1142 dev/systrace.c 	if (strp->proc->p_stat != SSLEEP)
strp             1149 dev/systrace.c systrace_getcwd(struct fsystrace *fst, struct str_process *strp)
strp             1154 dev/systrace.c 	DPRINTF(("%s: %d\n", __func__, strp->pid));
strp             1156 dev/systrace.c 	error = systrace_processready(strp);
strp             1161 dev/systrace.c 	fdp = strp->proc->p_fd;
strp             1166 dev/systrace.c 	fst->fd_pid = strp->pid;
strp             1179 dev/systrace.c systrace_io(struct str_process *strp, struct systrace_io *io)
strp             1181 dev/systrace.c 	struct proc *p = curproc, *t = strp->proc;
strp             1200 dev/systrace.c 	error = systrace_processready(strp);
strp             1298 dev/systrace.c 	struct str_process *strp;
strp             1301 dev/systrace.c 	strp = p->p_systrace;
strp             1302 dev/systrace.c 	strp->isscript = 0;
strp             1309 dev/systrace.c 	struct str_process *strp;
strp             1315 dev/systrace.c 		strp = p->p_systrace;
strp             1316 dev/systrace.c 		if (strp == NULL) {
strp             1321 dev/systrace.c 		msg_execve = &strp->msg.msg_data.msg_execve;
strp             1322 dev/systrace.c 		fst = strp->parent;
strp             1338 dev/systrace.c 	} while (systrace_make_msg(strp, SYSTR_MSG_EXECVE) != 0);
strp             1344 dev/systrace.c systrace_preprepl(struct str_process *strp, struct systrace_replace *repl)
strp             1349 dev/systrace.c 	ret = systrace_processready(strp);
strp             1353 dev/systrace.c 	if (strp->replace != NULL) {
strp             1354 dev/systrace.c 		free(strp->replace, M_XDATA);
strp             1355 dev/systrace.c 		strp->replace = NULL;
strp             1384 dev/systrace.c 	strp->replace = (struct systrace_replace *)
strp             1387 dev/systrace.c 	memcpy(strp->replace, repl, sizeof(struct systrace_replace));
strp             1388 dev/systrace.c 	ret = copyin(repl->strr_base, strp->replace + 1, len);
strp             1390 dev/systrace.c 		free(strp->replace, M_XDATA);
strp             1391 dev/systrace.c 		strp->replace = NULL;
strp             1396 dev/systrace.c 	repl = strp->replace;
strp             1407 dev/systrace.c systrace_replace(struct str_process *strp, size_t argsize, register_t args[])
strp             1409 dev/systrace.c 	struct systrace_replace *repl = strp->replace;
strp             1415 dev/systrace.c 	ubase = stackgap_alloc(&strp->sg, repl->strr_len);
strp             1434 dev/systrace.c 			ret = systrace_fname(strp, kdata, repl->strr_offlen[i]);
strp             1453 dev/systrace.c systrace_fname(struct str_process *strp, caddr_t kdata, size_t len)
strp             1455 dev/systrace.c 	if (strp->nfname >= SYSTR_MAXFNAME || len < 1)
strp             1458 dev/systrace.c 	strp->fname[strp->nfname] = kdata;
strp             1459 dev/systrace.c 	strp->fname[strp->nfname][len - 1] = '\0';
strp             1460 dev/systrace.c 	strp->nfname++;
strp             1466 dev/systrace.c systrace_replacefree(struct str_process *strp)
strp             1468 dev/systrace.c 	if (strp->replace != NULL) {
strp             1469 dev/systrace.c 		free(strp->replace, M_XDATA);
strp             1470 dev/systrace.c 		strp->replace = NULL;
strp             1472 dev/systrace.c 	while (strp->nfname > 0) {
strp             1473 dev/systrace.c 		strp->nfname--;
strp             1474 dev/systrace.c 		strp->fname[strp->nfname] = NULL;
strp             1480 dev/systrace.c 	struct str_process *strp;
strp             1485 dev/systrace.c 	strp = p->p_systrace;
strp             1486 dev/systrace.c 	fst = strp->parent;
strp             1499 dev/systrace.c 	if (strp != NULL) {
strp             1500 dev/systrace.c 		if (strp->scriptname[0] == '\0') {
strp             1505 dev/systrace.c 		strlcpy(dst, strp->scriptname, MAXPATHLEN);
strp             1506 dev/systrace.c 		strp->isscript = 1;
strp             1510 dev/systrace.c 	strp->scriptname[0] = '\0';
strp             1519 dev/systrace.c 	struct str_process *strp;
strp             1526 dev/systrace.c 	strp = cnp->cn_proc->p_systrace;
strp             1527 dev/systrace.c 	if (strp != NULL) {
strp             1528 dev/systrace.c 		fst = strp->parent;
strp             1532 dev/systrace.c 		for (i = 0; i < strp->nfname; i++)
strp             1533 dev/systrace.c 			if (strcmp(cnp->cn_pnbuf, strp->fname[i]) == 0) {
strp             1538 dev/systrace.c 		if (!hamper && strp->isscript &&
strp             1539 dev/systrace.c 		    strcmp(cnp->cn_pnbuf, strp->scriptname) == 0)
strp             1557 dev/systrace.c 	struct str_process *strp;
strp             1560 dev/systrace.c 	TAILQ_FOREACH(strp, &fst->processes, next)
strp             1561 dev/systrace.c 	    if (strp->pid == pid)
strp             1564 dev/systrace.c 	if (strp == NULL)
strp             1567 dev/systrace.c 	proc = systrace_find(strp);
strp             1569 dev/systrace.c 	return (proc ? strp : NULL);
strp             1573 dev/systrace.c systrace_detach(struct str_process *strp)
strp             1579 dev/systrace.c 	DPRINTF(("%s: Trying to detach from %d\n", __func__, strp->pid));
strp             1581 dev/systrace.c 	if ((proc = systrace_find(strp)) != NULL) {
strp             1587 dev/systrace.c 	if (ISSET(strp->flags, STR_PROC_WAITANSWER)) {
strp             1588 dev/systrace.c 		CLR(strp->flags, STR_PROC_WAITANSWER);
strp             1589 dev/systrace.c 		wakeup(strp);
strp             1592 dev/systrace.c 	fst = strp->parent;
strp             1595 dev/systrace.c 	if (ISSET(strp->flags, STR_PROC_ONQUEUE))
strp             1596 dev/systrace.c 		TAILQ_REMOVE(&fst->messages, strp, msg_next);
strp             1598 dev/systrace.c 	TAILQ_REMOVE(&fst->processes, strp, next);
strp             1601 dev/systrace.c 	if (strp->policy)
strp             1602 dev/systrace.c 		systrace_closepolicy(fst, strp->policy);
strp             1603 dev/systrace.c 	systrace_replacefree(strp);
strp             1604 dev/systrace.c 	pool_put(&systr_proc_pl, strp);
strp             1629 dev/systrace.c 	struct str_process *strp;
strp             1631 dev/systrace.c 	strp = pool_get(&systr_proc_pl, PR_NOWAIT);
strp             1632 dev/systrace.c 	if (strp == NULL)
strp             1635 dev/systrace.c 	memset((caddr_t)strp, 0, sizeof(struct str_process));
strp             1636 dev/systrace.c 	strp->pid = proc->p_pid;
strp             1637 dev/systrace.c 	strp->proc = proc;
strp             1638 dev/systrace.c 	strp->parent = fst;
strp             1640 dev/systrace.c 	TAILQ_INSERT_TAIL(&fst->processes, strp, next);
strp             1643 dev/systrace.c 	proc->p_systrace = strp;
strp             1698 dev/systrace.c systrace_msg_ask(struct fsystrace *fst, struct str_process *strp,
strp             1701 dev/systrace.c 	struct str_msg_ask *msg_ask = &strp->msg.msg_data.msg_ask;
strp             1709 dev/systrace.c 	return (systrace_make_msg(strp, SYSTR_MSG_ASK));
strp             1713 dev/systrace.c systrace_msg_result(struct fsystrace *fst, struct str_process *strp,
strp             1716 dev/systrace.c 	struct str_msg_ask *msg_ask = &strp->msg.msg_data.msg_ask;
strp             1728 dev/systrace.c 	return (systrace_make_msg(strp, SYSTR_MSG_RES));
strp             1732 dev/systrace.c systrace_msg_emul(struct fsystrace *fst, struct str_process *strp)
strp             1734 dev/systrace.c 	struct str_msg_emul *msg_emul = &strp->msg.msg_data.msg_emul;
strp             1735 dev/systrace.c 	struct proc *p = strp->proc;
strp             1739 dev/systrace.c 	return (systrace_make_msg(strp, SYSTR_MSG_EMUL));
strp             1743 dev/systrace.c systrace_msg_ugid(struct fsystrace *fst, struct str_process *strp)
strp             1745 dev/systrace.c 	struct str_msg_ugid *msg_ugid = &strp->msg.msg_data.msg_ugid;
strp             1746 dev/systrace.c 	struct proc *p = strp->proc;
strp             1751 dev/systrace.c 	return (systrace_make_msg(strp, SYSTR_MSG_UGID));
strp             1755 dev/systrace.c systrace_make_msg(struct str_process *strp, int type)
strp             1757 dev/systrace.c 	struct str_message *msg = &strp->msg;
strp             1758 dev/systrace.c 	struct fsystrace *fst = strp->parent;
strp             1765 dev/systrace.c 	msg->msg_seqnr = ++strp->seqnr;
strp             1767 dev/systrace.c 	msg->msg_pid = strp->pid;
strp             1768 dev/systrace.c 	if (strp->policy)
strp             1769 dev/systrace.c 		msg->msg_policy = strp->policy->nr;
strp             1773 dev/systrace.c 	SET(strp->flags, STR_PROC_WAITANSWER);
strp             1774 dev/systrace.c 	if (ISSET(strp->flags, STR_PROC_ONQUEUE))
strp             1777 dev/systrace.c 	TAILQ_INSERT_TAIL(&fst->messages, strp, msg_next);
strp             1778 dev/systrace.c 	SET(strp->flags, STR_PROC_ONQUEUE);
strp             1787 dev/systrace.c 		st = tsleep(strp, pri, "systrmsg", 0);
strp             1791 dev/systrace.c 		if ((strp = curproc->p_systrace) == NULL)
strp             1793 dev/systrace.c 		if (!ISSET(strp->flags, STR_PROC_WAITANSWER))
strp             1801 dev/systrace.c systrace_msg_child(struct fsystrace *fst, struct str_process *strp, pid_t npid)
strp             1811 dev/systrace.c 		    nstrp, strp->pid, npid));
strp             1817 dev/systrace.c 	msg->msg_pid = strp->pid;
strp             1818 dev/systrace.c 	if (strp->policy)
strp             1819 dev/systrace.c 		msg->msg_policy = strp->policy->nr;