View | Details | Raw Unified | Return to bug 48156
Collapse All | Expand All

(-)procfs/procfs.h (+4 lines)
Lines 100-105 Link Here
100
       ((p2)->p_flag & (P_SUGID|P_INEXEC)) == 0) || \
100
       ((p2)->p_flag & (P_SUGID|P_INEXEC)) == 0) || \
101
      (suser_xxx((p1)->p_cred->pc_ucred, (p1), PRISON_ROOT) == 0))
101
      (suser_xxx((p1)->p_cred->pc_ucred, (p1), PRISON_ROOT) == 0))
102
102
103
extern int	ps_showallprocs;
104
#define	PROCS_CHECK(p1, p2) \
105
	(PRISON_CHECK(p1, p2) && (ps_showallprocs || p_trespass(p1, p2) == 0))
106
103
/*
107
/*
104
 * Convert between pfsnode vnode
108
 * Convert between pfsnode vnode
105
 */
109
 */
(-)procfs/procfs_vnops.c (-4 / +12 lines)
Lines 138-144 Link Here
138
	p2 = PFIND(pfs->pfs_pid);
138
	p2 = PFIND(pfs->pfs_pid);
139
	if (p2 == NULL)
139
	if (p2 == NULL)
140
		return (ENOENT);
140
		return (ENOENT);
141
	if (pfs->pfs_pid && !PRISON_CHECK(ap->a_p, p2))
141
	if (pfs->pfs_pid && !PROCS_CHECK(ap->a_p, p2))
142
		return (ENOENT);
142
		return (ENOENT);
143
143
144
	switch (pfs->pfs_type) {
144
	switch (pfs->pfs_type) {
Lines 446-451 Link Here
446
		if (procp == NULL || procp->p_cred == NULL ||
446
		if (procp == NULL || procp->p_cred == NULL ||
447
		    procp->p_ucred == NULL)
447
		    procp->p_ucred == NULL)
448
			return (ENOENT);
448
			return (ENOENT);
449
		if (!PROCS_CHECK(ap->a_p, procp))
450
			return (ENOENT);
449
	}
451
	}
450
452
451
	error = 0;
453
	error = 0;
Lines 734-739 Link Here
734
		if (p == NULL)
736
		if (p == NULL)
735
			break;
737
			break;
736
738
739
		if (!PROCS_CHECK(curproc, p))
740
			break;
741
737
		return (procfs_allocvp(dvp->v_mount, vpp, pid, Pproc));
742
		return (procfs_allocvp(dvp->v_mount, vpp, pid, Pproc));
738
743
739
	case Pproc:
744
	case Pproc:
Lines 744-749 Link Here
744
		if (p == NULL)
749
		if (p == NULL)
745
			break;
750
			break;
746
751
752
		if (!PROCS_CHECK(curproc, p))
753
			break;
754
747
		for (pt = proc_targets, i = 0; i < nproc_targets; pt++, i++) {
755
		for (pt = proc_targets, i = 0; i < nproc_targets; pt++, i++) {
748
			if (cnp->cn_namelen == pt->pt_namlen &&
756
			if (cnp->cn_namelen == pt->pt_namlen &&
749
			    bcmp(pt->pt_name, pname, cnp->cn_namelen) == 0 &&
757
			    bcmp(pt->pt_name, pname, cnp->cn_namelen) == 0 &&
Lines 827-833 Link Here
827
		p = PFIND(pfs->pfs_pid);
835
		p = PFIND(pfs->pfs_pid);
828
		if (p == NULL)
836
		if (p == NULL)
829
			break;
837
			break;
830
		if (!PRISON_CHECK(curproc, p))
838
		if (!PROCS_CHECK(curproc, p))
831
			break;
839
			break;
832
840
833
		for (pt = &proc_targets[i];
841
		for (pt = &proc_targets[i];
Lines 890-900 Link Here
890
					p = p->p_list.le_next;
898
					p = p->p_list.le_next;
891
					if (!p)
899
					if (!p)
892
						goto done;
900
						goto done;
893
					if (!PRISON_CHECK(curproc, p))
901
					if (!PROCS_CHECK(curproc, p))
894
						continue;
902
						continue;
895
					pcnt++;
903
					pcnt++;
896
				}
904
				}
897
				while (!PRISON_CHECK(curproc, p)) {
905
				while (!PROCS_CHECK(curproc, p)) {
898
					p = p->p_list.le_next;
906
					p = p->p_list.le_next;
899
					if (!p)
907
					if (!p)
900
						goto done;
908
						goto done;

Return to bug 48156