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;