PERFORCE change 15693 for review

Robert Watson rwatson at freebsd.org
Thu Aug 8 20:25:32 GMT 2002


http://people.freebsd.org/~peter/p4db/chv.cgi?CH=15693

Change 15693 by rwatson at rwatson_paprika on 2002/08/08 13:24:54

	Restructure credential handling for a number of struct file operations
	so that both the file credential and active "requesting" credential
	are available for access control.  This will permit us to have policies
	that are sensitive to this distinction, either following the
	traditional UNIX cached credential model, or a live request model.
	
	This required changing the arguments to a number of file_op's to
	use the active credential rather than fp->f_cred, since fp is also
	passed.  In particular, stat, ioctl, and poll didn't already take
	a credential argument.

Affected files ...

.. //depot/projects/trustedbsd/mac/sys/alpha/alpha/vm_machdep.c#8 edit
.. //depot/projects/trustedbsd/mac/sys/alpha/osf1/osf1_misc.c#9 edit
.. //depot/projects/trustedbsd/mac/sys/compat/linux/linux_file.c#12 edit
.. //depot/projects/trustedbsd/mac/sys/compat/linux/linux_ioctl.c#9 edit
.. //depot/projects/trustedbsd/mac/sys/compat/linux/linux_stats.c#9 edit
.. //depot/projects/trustedbsd/mac/sys/compat/pecoff/imgact_pecoff.c#9 edit
.. //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_fcntl.c#9 edit
.. //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_filio.c#5 edit
.. //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_sockio.c#3 edit
.. //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_stream.c#6 edit
.. //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_termios.c#3 edit
.. //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_ttold.c#3 edit
.. //depot/projects/trustedbsd/mac/sys/dev/aac/aac.c#8 edit
.. //depot/projects/trustedbsd/mac/sys/dev/drm/drm_drv.h#3 edit
.. //depot/projects/trustedbsd/mac/sys/dev/streams/streams.c#6 edit
.. //depot/projects/trustedbsd/mac/sys/dev/tdfx/tdfx_pci.c#4 edit
.. //depot/projects/trustedbsd/mac/sys/fs/fdescfs/fdesc_vnops.c#7 edit
.. //depot/projects/trustedbsd/mac/sys/fs/fifofs/fifo_vnops.c#11 edit
.. //depot/projects/trustedbsd/mac/sys/i386/i386/vm_machdep.c#10 edit
.. //depot/projects/trustedbsd/mac/sys/i386/ibcs2/ibcs2_fcntl.c#4 edit
.. //depot/projects/trustedbsd/mac/sys/i386/ibcs2/ibcs2_ioctl.c#6 edit
.. //depot/projects/trustedbsd/mac/sys/ia64/ia64/vm_machdep.c#11 edit
.. //depot/projects/trustedbsd/mac/sys/isofs/cd9660/cd9660_vnops.c#6 edit
.. //depot/projects/trustedbsd/mac/sys/kern/imgact_aout.c#8 edit
.. //depot/projects/trustedbsd/mac/sys/kern/imgact_elf.c#9 edit
.. //depot/projects/trustedbsd/mac/sys/kern/kern_acct.c#8 edit
.. //depot/projects/trustedbsd/mac/sys/kern/kern_descrip.c#23 edit
.. //depot/projects/trustedbsd/mac/sys/kern/kern_event.c#8 edit
.. //depot/projects/trustedbsd/mac/sys/kern/kern_linker.c#11 edit
.. //depot/projects/trustedbsd/mac/sys/kern/link_aout.c#4 edit
.. //depot/projects/trustedbsd/mac/sys/kern/link_elf.c#7 edit
.. //depot/projects/trustedbsd/mac/sys/kern/sys_generic.c#12 edit
.. //depot/projects/trustedbsd/mac/sys/kern/sys_pipe.c#17 edit
.. //depot/projects/trustedbsd/mac/sys/kern/sys_socket.c#9 edit
.. //depot/projects/trustedbsd/mac/sys/kern/uipc_socket.c#34 edit
.. //depot/projects/trustedbsd/mac/sys/kern/uipc_syscalls.c#19 edit
.. //depot/projects/trustedbsd/mac/sys/kern/vfs_syscalls.c#75 edit
.. //depot/projects/trustedbsd/mac/sys/kern/vfs_vnops.c#42 edit
.. //depot/projects/trustedbsd/mac/sys/nfsclient/nfs_lock.c#8 edit
.. //depot/projects/trustedbsd/mac/sys/powerpc/powerpc/vm_machdep.c#9 edit
.. //depot/projects/trustedbsd/mac/sys/sys/file.h#9 edit
.. //depot/projects/trustedbsd/mac/sys/sys/socketvar.h#20 edit
.. //depot/projects/trustedbsd/mac/sys/sys/vnode.h#39 edit
.. //depot/projects/trustedbsd/mac/sys/ufs/ufs/ufs_lookup.c#8 edit
.. //depot/projects/trustedbsd/mac/sys/ufs/ufs/ufs_vnops.c#45 edit

Differences ...

==== //depot/projects/trustedbsd/mac/sys/alpha/alpha/vm_machdep.c#8 (text+ko) ====

@@ -408,12 +408,12 @@
 	/* XXXKSE this is totally bogus! (and insecure) */
 	error = vn_rdwr(UIO_WRITE, vp, (caddr_t) td->td_proc->p_uarea,
 	    ctob(UAREA_PAGES), (off_t)0,
-	    UIO_SYSSPACE, IO_UNIT, cred, (int *)NULL, td);
+	    UIO_SYSSPACE, IO_UNIT, cred, NOCRED, (int *)NULL, td);
 	if (error)
 		return error;
 	error = vn_rdwr(UIO_WRITE, vp, (caddr_t) td->td_kstack,
 	    ctob(KSTACK_PAGES), (off_t)ctob(UAREA_PAGES),
-	    UIO_SYSSPACE, IO_UNIT, cred, (int *)NULL, td);
+	    UIO_SYSSPACE, IO_UNIT, cred, NOCRED, (int *)NULL, td);
 	return error;
 }
 

==== //depot/projects/trustedbsd/mac/sys/alpha/osf1/osf1_misc.c#9 (text+ko) ====

@@ -618,7 +618,7 @@
 	    SCARG(uap, path), td);
 	if ((error = namei(&nd)))
 		return (error);
-	error = vn_stat(nd.ni_vp, &sb, td);
+	error = vn_stat(nd.ni_vp, &sb, td->td_ucred, NOCRED, td);
 	vput(nd.ni_vp);
 	if (error)
 		return (error);
@@ -649,7 +649,7 @@
 	    SCARG(uap, path), td);
 	if ((error = namei(&nd)))
 		return (error);
-	error = vn_stat(nd.ni_vp, &sb, td);
+	error = vn_stat(nd.ni_vp, &sb, td->td_ucred, NOCRED, td);
 	vput(nd.ni_vp);
 	if (error)
 		return (error);
@@ -674,7 +674,7 @@
 
 	if ((error = fget(td, uap->fd, &fp)) != 0)
 		return (error);
-	error = fo_stat(fp, &ub, td);
+	error = fo_stat(fp, &ub, td->td_ucred, td);
 	fdrop(fp, td);
 	cvtstat2osf1(&ub, &oub);
 	if (error == 0)

==== //depot/projects/trustedbsd/mac/sys/compat/linux/linux_file.c#12 (text+ko) ====

@@ -143,7 +143,8 @@
 	PROC_UNLOCK(p);
 	if (!error) {
 		if (fp->f_type == DTYPE_VNODE)
-			fo_ioctl(fp, TIOCSCTTY, (caddr_t) 0, td);
+			fo_ioctl(fp, TIOCSCTTY, (caddr_t) 0, td->td_ucred,
+			    td);
 	    fdrop(fp, td);
 	}
     } else {

==== //depot/projects/trustedbsd/mac/sys/compat/linux/linux_ioctl.c#9 (text+ko) ====

@@ -113,7 +113,8 @@
 		return (error);
 	switch (args->cmd & 0xffff) {
 	case LINUX_BLKGETSIZE:
-		error = fo_ioctl(fp, DIOCGDINFO, (caddr_t)&dl, td);
+		error = fo_ioctl(fp, DIOCGDINFO, (caddr_t)&dl, td->td_ucred,
+		    td);
 		fdrop(fp, td);
 		if (error)
 			return (error);
@@ -560,7 +561,8 @@
 	switch (args->cmd & 0xffff) {
 
 	case LINUX_TCGETS:
-		error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, td);
+		error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, td->td_ucred,
+		    td);
 		if (error)
 			break;
 		bsd_to_linux_termios(&bios, &lios);
@@ -572,7 +574,8 @@
 		if (error)
 			break;
 		linux_to_bsd_termios(&lios, &bios);
-		error = (fo_ioctl(fp, TIOCSETA, (caddr_t)&bios, td));
+		error = (fo_ioctl(fp, TIOCSETA, (caddr_t)&bios, td->td_ucred,
+		    td));
 		break;
 
 	case LINUX_TCSETSW:
@@ -580,7 +583,8 @@
 		if (error)
 			break;
 		linux_to_bsd_termios(&lios, &bios);
-		error = (fo_ioctl(fp, TIOCSETAW, (caddr_t)&bios, td));
+		error = (fo_ioctl(fp, TIOCSETAW, (caddr_t)&bios, td->td_ucred,
+		    td));
 		break;
 
 	case LINUX_TCSETSF:
@@ -588,11 +592,13 @@
 		if (error)
 			break;
 		linux_to_bsd_termios(&lios, &bios);
-		error = (fo_ioctl(fp, TIOCSETAF, (caddr_t)&bios, td));
+		error = (fo_ioctl(fp, TIOCSETAF, (caddr_t)&bios, td->td_ucred,
+		    td));
 		break;
 
 	case LINUX_TCGETA:
-		error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, td);
+		error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, td->td_ucred,
+		    td);
 		if (error)
 			break;
 		bsd_to_linux_termio(&bios, &lio);
@@ -604,7 +610,8 @@
 		if (error)
 			break;
 		linux_to_bsd_termio(&lio, &bios);
-		error = (fo_ioctl(fp, TIOCSETA, (caddr_t)&bios, td));
+		error = (fo_ioctl(fp, TIOCSETA, (caddr_t)&bios, td->td_ucred,
+		    td));
 		break;
 
 	case LINUX_TCSETAW:
@@ -612,7 +619,8 @@
 		if (error)
 			break;
 		linux_to_bsd_termio(&lio, &bios);
-		error = (fo_ioctl(fp, TIOCSETAW, (caddr_t)&bios, td));
+		error = (fo_ioctl(fp, TIOCSETAW, (caddr_t)&bios, td->td_ucred,
+		    td));
 		break;
 
 	case LINUX_TCSETAF:
@@ -620,7 +628,8 @@
 		if (error)
 			break;
 		linux_to_bsd_termio(&lio, &bios);
-		error = (fo_ioctl(fp, TIOCSETAF, (caddr_t)&bios, td));
+		error = (fo_ioctl(fp, TIOCSETAF, (caddr_t)&bios, td->td_ucred,
+		    td));
 		break;
 
 	/* LINUX_TCSBRK */
@@ -637,7 +646,8 @@
 		case LINUX_TCION: {
 			int c;
 			struct write_args wr;
-			error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, td);
+			error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios,
+			    td->td_ucred, td);
 			if (error)
 				break;
 			fdrop(fp, td);
@@ -799,14 +809,16 @@
 			fdrop(fp, td);
 			return (EINVAL);
 		}
-		error = (fo_ioctl(fp, TIOCSETD, (caddr_t)&line, td));
+		error = (fo_ioctl(fp, TIOCSETD, (caddr_t)&line, td->td_ucred,
+		    td));
 		break;
 	}
 
 	case LINUX_TIOCGETD: {
 		int linux_line;
 		int bsd_line = TTYDISC;
-		error = fo_ioctl(fp, TIOCGETD, (caddr_t)&bsd_line, td);
+		error = fo_ioctl(fp, TIOCGETD, (caddr_t)&bsd_line,
+		    td->td_ucred, td);
 		if (error)
 			return (error);
 		switch (bsd_line) {
@@ -1275,7 +1287,8 @@
 	case LINUX_CDROMREADTOCHDR: {
 		struct ioc_toc_header th;
 		struct linux_cdrom_tochdr lth;
-		error = fo_ioctl(fp, CDIOREADTOCHEADER, (caddr_t)&th, td);
+		error = fo_ioctl(fp, CDIOREADTOCHEADER, (caddr_t)&th,
+		    td->td_ucred, td);
 		if (!error) {
 			lth.cdth_trk0 = th.starting_track;
 			lth.cdth_trk1 = th.ending_track;
@@ -1290,7 +1303,8 @@
 		struct ioc_read_toc_single_entry irtse;
 		irtse.address_format = ltep->cdte_format;
 		irtse.track = ltep->cdte_track;
-		error = fo_ioctl(fp, CDIOREADTOCENTRY, (caddr_t)&irtse, td);
+		error = fo_ioctl(fp, CDIOREADTOCENTRY, (caddr_t)&irtse,
+		    td->td_ucred, td);
 		if (!error) {
 			lte = *ltep;
 			lte.cdte_ctrl = irtse.entry.control;
@@ -1331,7 +1345,8 @@
 		bsdsc.track = 0;
 		bsdsc.data_len = sizeof(struct cd_sub_channel_info);
 		bsdsc.data = bsdinfo;
-		error = fo_ioctl(fp, CDIOCREADSUBCHANNEL, (caddr_t)&bsdsc, td);
+		error = fo_ioctl(fp, CDIOCREADSUBCHANNEL, (caddr_t)&bsdsc,
+		    td->td_ucred, td);
 		if (error)
 			break;
 		error = copyin((caddr_t)args->arg, &sc,
@@ -1397,7 +1412,8 @@
 		error = linux_to_bsd_dvd_struct(&lds, &bds);
 		if (error)
 			break;
-		error = fo_ioctl(fp, DVDIOCREADSTRUCTURE, (caddr_t)&bds, td);
+		error = fo_ioctl(fp, DVDIOCREADSTRUCTURE, (caddr_t)&bds,
+		    td->td_ucred, td);
 		if (error)
 			break;
 		error = bsd_to_linux_dvd_struct(&bds, &lds);
@@ -1422,7 +1438,7 @@
 		error = linux_to_bsd_dvd_authinfo(&lda, &bcode, &bda);
 		if (error)
 			break;
-		error = fo_ioctl(fp, bcode, (caddr_t)&bda, td);
+		error = fo_ioctl(fp, bcode, (caddr_t)&bda, td->td_ucred, td);
 		if (error) {
 			if (lda.type == LINUX_DVD_HOST_SEND_KEY2) {
 				lda.type = LINUX_DVD_AUTH_FAILURE;
@@ -1759,7 +1775,8 @@
 			fdrop(fp, td);
 			return (EINVAL);
 		}
-		error = (fo_ioctl(fp, KDSKBMODE, (caddr_t)&kbdmode, td));
+		error = (fo_ioctl(fp, KDSKBMODE, (caddr_t)&kbdmode,
+		    td->td_ucred, td));
 		break;
 	}
 

==== //depot/projects/trustedbsd/mac/sys/compat/linux/linux_stats.c#9 (text+ko) ====

@@ -112,7 +112,7 @@
 		return (error);
 	NDFREE(&nd, NDF_ONLY_PNBUF);
 
-	error = vn_stat(nd.ni_vp, &buf, td);
+	error = vn_stat(nd.ni_vp, &buf, td->td_ucred, NOCRED, td);
 	vput(nd.ni_vp);
 	if (error)
 		return (error);
@@ -143,7 +143,7 @@
 		return (error);
 	NDFREE(&nd, NDF_ONLY_PNBUF); 
 
-	error = vn_stat(nd.ni_vp, &sb, td);
+	error = vn_stat(nd.ni_vp, &sb, td->td_ucred, NOCRED, td);
 	vput(nd.ni_vp);
 	if (error)
 		return (error);
@@ -166,7 +166,7 @@
 	if ((error = fget(td, args->fd, &fp)) != 0)
 		return (error);
 
-	error = fo_stat(fp, &buf, td);
+	error = fo_stat(fp, &buf, td->td_ucred, td);
 	fdrop(fp, td);
 	if (!error)
 		error = newstat_copyout(&buf, args->buf);
@@ -433,7 +433,7 @@
 		return (error);
 	NDFREE(&nd, NDF_ONLY_PNBUF);
 
-	error = vn_stat(nd.ni_vp, &buf, td);
+	error = vn_stat(nd.ni_vp, &buf, td->td_ucred, NOCRED, td);
 	vput(nd.ni_vp);
 	if (error)
 		return (error);
@@ -464,7 +464,7 @@
 		return (error);
 	NDFREE(&nd, NDF_ONLY_PNBUF); 
 
-	error = vn_stat(nd.ni_vp, &sb, td);
+	error = vn_stat(nd.ni_vp, &sb, td->td_ucred, NOCRED, td);
 	vput(nd.ni_vp);
 	if (error)
 		return (error);
@@ -490,7 +490,7 @@
 	    (fp = fdp->fd_ofiles[args->fd]) == NULL)
 		return (EBADF);
 
-	error = fo_stat(fp, &buf, td);
+	error = fo_stat(fp, &buf, td->td_ucred, td);
 	if (!error)
 		error = stat64_copyout(&buf, args->statbuf);
 

==== //depot/projects/trustedbsd/mac/sys/compat/pecoff/imgact_pecoff.c#9 (text+ko) ====

@@ -192,14 +192,14 @@
 		error = vn_rdwr_inchunks(UIO_WRITE, vp, vm->vm_daddr,
 		    (int)ctob(vm->vm_dsize),
 		    (off_t)ctob((UAREA_PAGES+KSTACK_PAGES)),
-		    UIO_USERSPACE, IO_UNIT, cred, (int *)NULL, td);
+		    UIO_USERSPACE, IO_UNIT, cred, NOCRED, (int *)NULL, td);
 	if (error == 0)
 		error = vn_rdwr_inchunks(UIO_WRITE, vp,
 		    (caddr_t)trunc_page(USRSTACK - ctob(vm->vm_ssize)),
 		    round_page(ctob(vm->vm_ssize)),
 		    (off_t)ctob((UAREA_PAGES+KSTACK_PAGES)) +
 		    ctob(vm->vm_dsize),
-		    UIO_USERSPACE, IO_UNIT, cred, (int *)NULL, td);
+		    UIO_USERSPACE, IO_UNIT, cred, NOCRED, (int *)NULL, td);
 	return (error);
 
 }
@@ -609,7 +609,7 @@
 	size_t          resid;
 
 	error = vn_rdwr(UIO_READ, vp, buf, siz, pos,
-			UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred,
+			UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred, NOCRED,
 			&resid, td);
 	if (error)
 		return error;

==== //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_fcntl.c#9 (text+ko) ====

@@ -399,7 +399,8 @@
 			return (EBADF);	/* XXX: correct errno? */
 		/* ignore any error, just give it a try */
 		if (fp->f_type == DTYPE_VNODE)
-			fo_ioctl(fp, TIOCSCTTY, (caddr_t) 0, td);
+			fo_ioctl(fp, TIOCSCTTY, (caddr_t) 0, td->td_ucred,
+			    td);
 		fdrop(fp, td);
 	} else {
 		PROC_UNLOCK(p);

==== //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_filio.c#5 (text+ko) ====

@@ -219,7 +219,7 @@
 #ifdef SVR4_DEBUG
 		if (cmd == FIOASYNC) DPRINTF(("FIOASYNC\n"));
 #endif
-		error = fo_ioctl(fp, cmd, (caddr_t) &num, td);
+		error = fo_ioctl(fp, cmd, (caddr_t) &num, td->td_ucred, td);
 
 		if (error)
 			return error;

==== //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_sockio.c#3 (text+ko) ====

@@ -125,7 +125,8 @@
 			(void) strncpy(br.ifr_name, sr.svr4_ifr_name,
 			    sizeof(br.ifr_name));
 			if ((error = fo_ioctl(fp, SIOCGIFFLAGS, 
-					    (caddr_t) &br, td)) != 0) {
+					    (caddr_t) &br, td->td_ucred,
+					    td)) != 0) {
 				DPRINTF(("SIOCGIFFLAGS (%s) %s: error %d\n", 
 					 br.ifr_name, sr.svr4_ifr_name, error));
 				return error;
@@ -148,8 +149,8 @@
 				sizeof(struct ifreq), sizeof(struct svr4_ifreq),
 				sc.svr4_ifc_len));
 
-			if ((error = fo_ioctl(fp, OSIOCGIFCONF,
-					    (caddr_t) &sc, td)) != 0)
+			if ((error = fo_ioctl(fp, OSIOCGIFCONF, (caddr_t) &sc,
+			    td->td_ucred, td)) != 0)
 				return error;
 
 			DPRINTF(("SIOCGIFCONF\n"));

==== //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_stream.c#6 (text+ko) ====

@@ -1267,7 +1267,8 @@
 	 * for us, and if we do, then we assume that we have at least one
 	 * message waiting for us.
 	 */
-	if ((error = fo_ioctl(fp, FIONREAD, (caddr_t) &nread, td)) != 0)
+	if ((error = fo_ioctl(fp, FIONREAD, (caddr_t) &nread, td->td_ucred,
+	    td)) != 0)
 		return error;
 
 	if (nread != 0)

==== //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_termios.c#3 (text+ko) ====

@@ -499,7 +499,8 @@
 	case SVR4_TCGETA:
 	case SVR4_TCGETS:
 		DPRINTF(("ioctl(TCGET%c);\n", cmd == SVR4_TCGETA ? 'A' : 'S'));
-		if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t) &bt, td)) != 0)
+		if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t) &bt,
+		    td->td_ucred, td)) != 0)
 			return error;
 
 		memset(&st, 0, sizeof(st));
@@ -526,7 +527,8 @@
 	case SVR4_TCSETSF:
 	        DPRINTF(("TCSET{A,S,AW,SW,AF,SF}\n"));
 		/* get full BSD termios so we don't lose information */
-		if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t) &bt, td)) != 0)
+		if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t) &bt,
+		    td->td_ucred, td)) != 0)
 			return error;
 
 		switch (cmd) {
@@ -577,14 +579,15 @@
 		print_svr4_termios(&st);
 #endif /* DEBUG_SVR4 */
 
-		return fo_ioctl(fp, cmd, (caddr_t) &bt, td);
+		return fo_ioctl(fp, cmd, (caddr_t) &bt, td->td_ucred, td);
 
 	case SVR4_TIOCGWINSZ:
 	        DPRINTF(("TIOCGWINSZ\n"));
 		{
 			struct svr4_winsize ws;
 
-			error = fo_ioctl(fp, TIOCGWINSZ, (caddr_t) &ws, td);
+			error = fo_ioctl(fp, TIOCGWINSZ, (caddr_t) &ws,
+			    td->td_ucred, td);
 			if (error)
 				return error;
 			return copyout(&ws, data, sizeof(ws));
@@ -597,7 +600,8 @@
 
 			if ((error = copyin(data, &ws, sizeof(ws))) != 0)
 				return error;
-			return fo_ioctl(fp, TIOCSWINSZ, (caddr_t) &ws, td);
+			return fo_ioctl(fp, TIOCSWINSZ, (caddr_t) &ws,
+			    td->td_ucred, td);
 		}
 
 	default:

==== //depot/projects/trustedbsd/mac/sys/compat/svr4/svr4_ttold.c#3 (text+ko) ====

@@ -192,7 +192,8 @@
 		{
 			pid_t pid;
 
-			if ((error = fo_ioctl(fp, TIOCGPGRP, (caddr_t) &pid, td)) != 0)
+			if ((error = fo_ioctl(fp, TIOCGPGRP, (caddr_t) &pid,
+			    td->td_ucred, td)) != 0)
 			    return error;
 
 			DPRINTF(("TIOCGPGRP %d\n", pid));
@@ -211,14 +212,16 @@
 
 			DPRINTF(("TIOCSPGRP %d\n", pid));
 
-			return fo_ioctl(fp, TIOCSPGRP, (caddr_t) &pid, td);
+			return fo_ioctl(fp, TIOCSPGRP, (caddr_t) &pid,
+			    td->td_ucred, td);
 		}
 
 	case SVR4_TIOCGSID:
 		{
 #if defined(TIOCGSID)
 			pid_t pid;
-			if ((error = fo_ioctl(fp, TIOCGSID, (caddr_t) &pid, td)) != 0)
+			if ((error = fo_ioctl(fp, TIOCGSID, (caddr_t) &pid,
+			    td->td_ucred, td)) != 0)
 				return error;
 
 			DPRINTF(("TIOCGSID %d\n", pid));
@@ -235,7 +238,8 @@
 			struct sgttyb bs;
 			struct svr4_sgttyb ss;
 
-			error = fo_ioctl(fp, TIOCGETP, (caddr_t) &bs, td);
+			error = fo_ioctl(fp, TIOCGETP, (caddr_t) &bs,
+			    td->td_ucred, td);
 			if (error)
 				return error;
 
@@ -260,7 +264,8 @@
 			print_svr4_sgttyb("SVR4_TIOCSET{P,N}", &ss);
 #endif /* DEBUG_SVR4 */
 			cmd = (cmd == SVR4_TIOCSETP) ? TIOCSETP : TIOCSETN;
-			return fo_ioctl(fp, cmd, (caddr_t) &bs, td);
+			return fo_ioctl(fp, cmd, (caddr_t) &bs, td->td_ucred,
+			    td);
 		}
 
 	case SVR4_TIOCGETC:
@@ -268,7 +273,8 @@
 			struct tchars bt;
 			struct svr4_tchars st;
 
-			error = fo_ioctl(fp, TIOCGETC, (caddr_t) &bt, td);
+			error = fo_ioctl(fp, TIOCGETC, (caddr_t) &bt,
+			    td->td_ucred, td);
 			if (error)
 				return error;
 
@@ -291,7 +297,8 @@
 #ifdef DEBUG_SVR4
 			print_svr4_tchars("SVR4_TIOCSETC", &st);
 #endif /* DEBUG_SVR4 */
-			return fo_ioctl(fp, TIOCSETC, (caddr_t) &bt, td);
+			return fo_ioctl(fp, TIOCSETC, (caddr_t) &bt,
+			    td->td_ucred, td);
 		}
 
 	case SVR4_TIOCGLTC:
@@ -299,7 +306,8 @@
 			struct ltchars bl;
 			struct svr4_ltchars sl;
 
-			error = fo_ioctl(fp, TIOCGLTC, (caddr_t) &bl, td);
+			error = fo_ioctl(fp, TIOCGLTC, (caddr_t) &bl,
+			    td->td_ucred, td);
 			if (error)
 				return error;
 
@@ -322,13 +330,15 @@
 #ifdef DEBUG_SVR4
 			print_svr4_ltchars("SVR4_TIOCSLTC", &sl);
 #endif /* DEBUG_SVR4 */
-			return fo_ioctl(fp, TIOCSLTC, (caddr_t) &bl, td);
+			return fo_ioctl(fp, TIOCSLTC, (caddr_t) &bl,
+			    td->td_ucred, td);
 		}
 
 	case SVR4_TIOCLGET:
 		{
 			int flags;
-			if ((error = fo_ioctl(fp, TIOCLGET, (caddr_t) &flags, td)) != 0)
+			if ((error = fo_ioctl(fp, TIOCLGET, (caddr_t) &flags,
+			    td->td_ucred, td)) != 0)
 				return error;
 			DPRINTF(("SVR4_TIOCLGET %o\n", flags));
 			return copyout(&flags, data, sizeof(flags));
@@ -356,7 +366,8 @@
 			}
 
 			DPRINTF(("SVR4_TIOCL{SET,BIS,BIC} %o\n", flags));
-			return fo_ioctl(fp, cmd, (caddr_t) &flags, td);
+			return fo_ioctl(fp, cmd, (caddr_t) &flags,
+			    td->td_ucred, td);
 		}
 
 	default:

==== //depot/projects/trustedbsd/mac/sys/dev/aac/aac.c#8 (text+ko) ====

@@ -2535,7 +2535,7 @@
 	/*
 	 * Pass the ioctl off to our standard handler.
 	 */
-	error = (fo_ioctl(fp, cmd, (caddr_t)args->arg, td));
+	error = (fo_ioctl(fp, cmd, (caddr_t)args->arg, td->td_ucred, td));
 	fdrop(fp, td);
 	return (error);
 }

==== //depot/projects/trustedbsd/mac/sys/dev/drm/drm_drv.h#3 (text+ko) ====

@@ -1439,7 +1439,11 @@
     /*
      * Pass the ioctl off to our standard handler.
      */
+#if (__FreeBSD_version >= 500000)
+    return(fo_ioctl(fp, cmd, data, p->td_ucred));
+#else
     return(fo_ioctl(fp, cmd, data, p));
+#endif
 }
 #endif /* DRM_LINUX */
 #endif /* __FreeBSD__ */

==== //depot/projects/trustedbsd/mac/sys/dev/streams/streams.c#6 (text+ko) ====

@@ -61,7 +61,7 @@
 #include <compat/svr4/svr4_stropts.h>
 #include <compat/svr4/svr4_socket.h>
 
-static int svr4_soo_close(struct file *, struct thread *);
+static int svr4_soo_close(struct file *, struct ucred *, struct thread *);
 static int svr4_ptm_alloc(struct thread *);
 static  d_open_t	streamsopen;
 
@@ -416,7 +416,7 @@
 }
 
 static int
-svr4_soo_close(struct file *fp, struct thread *td)
+svr4_soo_close(struct file *fp, struct ucred *active_cred, struct thread *td)
 {
         struct socket *so = (struct socket *)fp->f_data;
 	
@@ -424,5 +424,5 @@
 
 	svr4_delete_socket(td->td_proc, fp);
 	free(so->so_emuldata, M_TEMP);
-	return soo_close(fp, td);
+	return soo_close(fp, active_cred, td);
 }

==== //depot/projects/trustedbsd/mac/sys/dev/tdfx/tdfx_pci.c#4 (text+ko) ====

@@ -848,7 +848,7 @@
 	   return (error);
    /* We simply copy the data and send it right to ioctl */
    copyin((caddr_t)args->arg, &d_pio, sizeof(d_pio));
-   error = fo_ioctl(fp, cmd, (caddr_t)&d_pio, td);
+   error = fo_ioctl(fp, cmd, (caddr_t)&d_pio, td->td_ucred, td);
    fdrop(fp, td);
    return error;
 }

==== //depot/projects/trustedbsd/mac/sys/fs/fdescfs/fdesc_vnops.c#7 (text+ko) ====

@@ -302,7 +302,7 @@
 			return (error);
 
 		bzero(&stb, sizeof(stb));
-		error = fo_stat(fp, &stb, ap->a_td);
+		error = fo_stat(fp, &stb, ap->a_td->td_ucred, ap->a_td);
 		fdrop(fp, ap->a_td);
 		if (error == 0) {
 			VATTR_NULL(vap);

==== //depot/projects/trustedbsd/mac/sys/fs/fifofs/fifo_vnops.c#11 (text+ko) ====

@@ -348,13 +348,17 @@
 		return (0);
 	if (ap->a_fflag & FREAD) {
 		filetmp.f_data = (caddr_t)ap->a_vp->v_fifoinfo->fi_readsock;
-		error = soo_ioctl(&filetmp, ap->a_command, ap->a_data, ap->a_td);
+		filetmp.f_cred = ap->a_cred;
+		error = soo_ioctl(&filetmp, ap->a_command, ap->a_data,
+		    ap->a_td->td_ucred, ap->a_td);
 		if (error)
 			return (error);
 	}
 	if (ap->a_fflag & FWRITE) {
 		filetmp.f_data = (caddr_t)ap->a_vp->v_fifoinfo->fi_writesock;
-		error = soo_ioctl(&filetmp, ap->a_command, ap->a_data, ap->a_td);
+		filetmp.f_cred = ap->a_cred;
+		error = soo_ioctl(&filetmp, ap->a_command, ap->a_data,
+		    ap->a_td->td_ucred, ap->a_td);
 		if (error)
 			return (error);
 	}
@@ -488,9 +492,10 @@
 	events = ap->a_events & (POLLOUT | POLLWRNORM | POLLWRBAND);
 	if (events) {
 		filetmp.f_data = (caddr_t)ap->a_vp->v_fifoinfo->fi_writesock;
+		filetmp.f_cred = ap->a_cred;
 		if (filetmp.f_data)
-			revents |= soo_poll(&filetmp, events, ap->a_cred,
-			    ap->a_td);
+			revents |= soo_poll(&filetmp, events,
+			    ap->a_td->td_ucred, ap->a_td);
 	}
 	return (revents);
 }

==== //depot/projects/trustedbsd/mac/sys/i386/i386/vm_machdep.c#10 (text+ko) ====

@@ -470,7 +470,8 @@
 
 	error = vn_rdwr(UIO_WRITE, vp, (caddr_t) tempuser, 
 			ctob(UAREA_PAGES + KSTACK_PAGES),
-			(off_t)0, UIO_SYSSPACE, IO_UNIT, cred, (int *)NULL, td);
+			(off_t)0, UIO_SYSSPACE, IO_UNIT, cred, NOCRED,
+			(int *)NULL, td);
 
 	free(tempuser, M_TEMP);
 	

==== //depot/projects/trustedbsd/mac/sys/i386/ibcs2/ibcs2_fcntl.c#4 (text+ko) ====

@@ -203,7 +203,8 @@
 
 		/* ignore any error, just give it a try */
 		if (fp->f_type == DTYPE_VNODE)
-			fo_ioctl(fp, TIOCSCTTY, (caddr_t) 0, td);
+			fo_ioctl(fp, TIOCSCTTY, (caddr_t) 0, td->td_ucred,
+			    td);
 		fdrop(fp, td);
 	} else
 		PROC_UNLOCK(p);

==== //depot/projects/trustedbsd/mac/sys/i386/ibcs2/ibcs2_ioctl.c#6 (text+ko) ====

@@ -365,7 +365,8 @@
 		struct ibcs2_termios sts;
 		struct ibcs2_termio st;
 	
-		if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bts, td)) != 0)
+		if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bts,
+		    td->td_ucred, td)) != 0)
 			break;
 	
 		btios2stios (&bts, &sts);
@@ -403,7 +404,8 @@
 		}
 
 		/* get full BSD termios so we don't lose information */
-		if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bts, td)) != 0) {
+		if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bts,
+		    td->td_ucred, td)) != 0) {
 			DPRINTF(("ibcs2_ioctl(%d): TCSET ctl failed fd %d ",
 				 p->p_pid, SCARG(uap, fd)));
 			break;
@@ -418,7 +420,7 @@
 		stios2btios(&sts, &bts);
 
 		error = fo_ioctl(fp, SCARG(uap, cmd) - IBCS2_TCSETA + TIOCSETA,
-			      (caddr_t)&bts, td);
+			      (caddr_t)&bts, td->td_ucred, td);
 		break;
 	    }
 
@@ -434,7 +436,7 @@
 			break;
 		stios2btios (&sts, &bts);
 		error = fo_ioctl(fp, SCARG(uap, cmd) - IBCS2_XCSETA + TIOCSETA,
-			      (caddr_t)&bts, td);
+			      (caddr_t)&bts, td->td_ucred, td);
 		break;
 	    }
 
@@ -450,7 +452,7 @@
 			break;
 		stios2btios (&sts, &bts);
 		error = fo_ioctl(fp, SCARG(uap, cmd) - IBCS2_OXCSETA + TIOCSETA,
-			      (caddr_t)&bts, td);
+			      (caddr_t)&bts, td->td_ucred, td);
 		break;
 	    }
 
@@ -468,10 +470,12 @@
 			error = ENOSYS;
 			break;
 		case 2:
-			error = fo_ioctl(fp, TIOCSTOP, (caddr_t)0, td);
+			error = fo_ioctl(fp, TIOCSTOP, (caddr_t)0,
+			    td->td_ucred, td);
 			break;
 		case 3:
-			error = fo_ioctl(fp, TIOCSTART, (caddr_t)1, td);
+			error = fo_ioctl(fp, TIOCSTART, (caddr_t)1,
+			    td->td_ucred, td);
 			break;
 		default:
 			error = EINVAL;
@@ -498,7 +502,8 @@
 			fdrop(fp, td);
 			return EINVAL;
 		}
-		error = fo_ioctl(fp, TIOCFLUSH, (caddr_t)&arg, td);
+		error = fo_ioctl(fp, TIOCFLUSH, (caddr_t)&arg, td->td_ucred,
+		    td);
 		break;
 	    }
 

==== //depot/projects/trustedbsd/mac/sys/ia64/ia64/vm_machdep.c#11 (text+ko) ====

@@ -375,12 +375,12 @@
 
 	error = vn_rdwr(UIO_WRITE, vp, (caddr_t) td->td_proc->p_uarea,
 	    ctob(UAREA_PAGES), (off_t)0,
-	    UIO_SYSSPACE, IO_UNIT, cred, (int *)NULL, td);
+	    UIO_SYSSPACE, IO_UNIT, cred, NOCRED, (int *)NULL, td);
 	if (error)
 		return error;
 	error = vn_rdwr(UIO_WRITE, vp, (caddr_t) td->td_kstack,
 	    ctob(KSTACK_PAGES), (off_t)0,
-	    UIO_SYSSPACE, IO_UNIT, cred, (int *)NULL, td);
+	    UIO_SYSSPACE, IO_UNIT, cred, NOCRED, (int *)NULL, td);
 	return error;
 }
 

==== //depot/projects/trustedbsd/mac/sys/isofs/cd9660/cd9660_vnops.c#6 (text+ko) ====


==== //depot/projects/trustedbsd/mac/sys/kern/imgact_aout.c#8 (text+ko) ====

@@ -271,14 +271,14 @@
 		error = vn_rdwr(UIO_WRITE, vp, vm->vm_daddr,
 		    (int)ctob(vm->vm_dsize),
 		    (off_t)ctob(UAREA_PAGES + KSTACK_PAGES), UIO_USERSPACE,
-		    IO_UNIT | IO_DIRECT, cred, (int *) NULL, td);
+		    IO_UNIT | IO_DIRECT, cred, NOCRED, (int *) NULL, td);
 	if (error == 0)
 		error = vn_rdwr_inchunks(UIO_WRITE, vp,
 		    (caddr_t) trunc_page(USRSTACK - ctob(vm->vm_ssize)),
 		    round_page(ctob(vm->vm_ssize)),
 		    (off_t)ctob(UAREA_PAGES + KSTACK_PAGES) +
 		        ctob(vm->vm_dsize), UIO_USERSPACE,
-		    IO_UNIT | IO_DIRECT, cred, (int *) NULL, td);
+		    IO_UNIT | IO_DIRECT, cred, NOCRED, (int *) NULL, td);
 	return (error);
 }
 

==== //depot/projects/trustedbsd/mac/sys/kern/imgact_elf.c#9 (text+ko) ====

@@ -972,7 +972,8 @@
 			error = vn_rdwr_inchunks(UIO_WRITE, vp,
 			    (caddr_t)(uintptr_t)php->p_vaddr,
 			    php->p_filesz, offset, UIO_USERSPACE,
-			    IO_UNIT | IO_DIRECT, cred, (int *)NULL, curthread); /* XXXKSE */
+			    IO_UNIT | IO_DIRECT, cred, NOCRED, (int *)NULL,
+			    curthread); /* XXXKSE */
 			if (error != 0)
 				break;
 			offset += php->p_filesz;
@@ -1136,7 +1137,8 @@
 
 	/* Write it to the core file. */
 	return vn_rdwr_inchunks(UIO_WRITE, vp, hdr, hdrsize, (off_t)0,
-	    UIO_SYSSPACE, IO_UNIT | IO_DIRECT, cred, NULL, td); /* XXXKSE */
+	    UIO_SYSSPACE, IO_UNIT | IO_DIRECT, cred, NOCRED, NULL,
+	    td); /* XXXKSE */
 }
 
 static void

==== //depot/projects/trustedbsd/mac/sys/kern/kern_acct.c#8 (text+ko) ====

@@ -267,7 +267,7 @@
 	 */
 	VOP_LEASE(vp, td, acctcred, LEASE_WRITE);
 	return (vn_rdwr(UIO_WRITE, vp, (caddr_t)&acct, sizeof (acct),
-	    (off_t)0, UIO_SYSSPACE, IO_APPEND|IO_UNIT, acctcred,
+	    (off_t)0, UIO_SYSSPACE, IO_APPEND|IO_UNIT, acctcred, NOCRED,
 	    (int *)0, td));
 }
 

==== //depot/projects/trustedbsd/mac/sys/kern/kern_descrip.c#23 (text+ko) ====

@@ -98,16 +98,19 @@
 	/* flags */	0,
 };
 
-static int do_dup(struct filedesc *fdp, int old, int new, register_t *retval, struct thread *td);
+static int do_dup(struct filedesc *fdp, int old, int new, register_t *retval,
+    struct thread *td);
 static int badfo_readwrite(struct file *fp, struct uio *uio,
-    struct ucred *cred, int flags, struct thread *td);
+    struct ucred *active_cred, int flags, struct thread *td);
 static int badfo_ioctl(struct file *fp, u_long com, void *data,
+    struct ucred *active_cred, struct thread *td);
+static int badfo_poll(struct file *fp, int events, struct ucred *active_cred,
     struct thread *td);
-static int badfo_poll(struct file *fp, int events,
-    struct ucred *cred, struct thread *td);
 static int badfo_kqfilter(struct file *fp, struct knote *kn);
-static int badfo_stat(struct file *fp, struct stat *sb, struct thread *td);
-static int badfo_close(struct file *fp, struct thread *td);
+static int badfo_stat(struct file *fp, struct stat *sb,
+    struct ucred *active_cred, struct thread *td);
+static int badfo_close(struct file *fp, struct ucred *active_cred,
+    struct thread *td);
 
 /*
  * Descriptor management.
@@ -343,34 +346,35 @@
 		fp->f_flag &= ~FCNTLFLAGS;
 		fp->f_flag |= FFLAGS(uap->arg & ~O_ACCMODE) & FCNTLFLAGS;
 		tmp = fp->f_flag & FNONBLOCK;
-		error = fo_ioctl(fp, FIONBIO, &tmp, td);
+		error = fo_ioctl(fp, FIONBIO, &tmp, td->td_ucred, td);
 		if (error) {
 			fdrop(fp, td);
 			break;
 		}
 		tmp = fp->f_flag & FASYNC;
-		error = fo_ioctl(fp, FIOASYNC, &tmp, td);
+		error = fo_ioctl(fp, FIOASYNC, &tmp, td->td_ucred, td);
 		if (!error) {
 			fdrop(fp, td);
 			break;
 		}
 		fp->f_flag &= ~FNONBLOCK;
 		tmp = 0;
-		(void)fo_ioctl(fp, FIONBIO, &tmp, td);
+		(void)fo_ioctl(fp, FIONBIO, &tmp, td->td_ucred, td);
 		fdrop(fp, td);
 		break;
 
 	case F_GETOWN:
 		fhold(fp);
 		FILEDESC_UNLOCK(fdp);
-		error = fo_ioctl(fp, FIOGETOWN, (void *)td->td_retval, td);
+		error = fo_ioctl(fp, FIOGETOWN, (void *)td->td_retval,
+		    td->td_ucred, td);
 		fdrop(fp, td);
 		break;
 
 	case F_SETOWN:
 		fhold(fp);
 		FILEDESC_UNLOCK(fdp);
-		error = fo_ioctl(fp, FIOSETOWN, &uap->arg, td);
+		error = fo_ioctl(fp, FIOSETOWN, &uap->arg, td->td_ucred, td);
 		fdrop(fp, td);
 		break;
 
@@ -860,7 +864,7 @@
 	mtx_lock(&Giant);
 	if ((error = fget(td, uap->fd, &fp)) != 0)
 		goto done2;
-	error = fo_stat(fp, &ub, td);
+	error = fo_stat(fp, &ub, td->td_ucred, td);
 	if (error == 0) {
 		cvtstat(&ub, &oub);
 		error = copyout(&oub, uap->sb, sizeof (oub));
@@ -897,7 +901,7 @@
 	mtx_lock(&Giant);
 	if ((error = fget(td, uap->fd, &fp)) != 0)
 		goto done2;
-	error = fo_stat(fp, &ub, td);
+	error = fo_stat(fp, &ub, td->td_ucred, td);
 	if (error == 0)
 		error = copyout(&ub, uap->sb, sizeof (ub));
 	fdrop(fp, td);
@@ -932,7 +936,7 @@
 	mtx_lock(&Giant);
 	if ((error = fget(td, uap->fd, &fp)) != 0)
 		goto done2;
-	error = fo_stat(fp, &ub, td);
+	error = fo_stat(fp, &ub, td->td_ucred, td);
 	if (error == 0) {
 		cvtnstat(&ub, &nub);
 		error = copyout(&nub, uap->sb, sizeof (nub));
@@ -1844,7 +1848,7 @@
 	} else

>>> TRUNCATED FOR MAIL (1000 lines) <<<
To Unsubscribe: send mail to majordomo at trustedbsd.org
with "unsubscribe trustedbsd-cvs" in the body of the message



More information about the trustedbsd-cvs mailing list