aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/alpha/osf1/osf1_misc.c6
-rw-r--r--sys/compat/linux/linux_stats.c12
-rw-r--r--sys/fs/fdescfs/fdesc_vnops.c2
-rw-r--r--sys/fs/fifofs/fifo_vnops.c5
-rw-r--r--sys/kern/kern_descrip.c18
-rw-r--r--sys/kern/kern_event.c13
-rw-r--r--sys/kern/sys_generic.c5
-rw-r--r--sys/kern/sys_pipe.c18
-rw-r--r--sys/kern/sys_socket.c10
-rw-r--r--sys/kern/uipc_socket.c3
-rw-r--r--sys/kern/vfs_extattr.c14
-rw-r--r--sys/kern/vfs_syscalls.c14
-rw-r--r--sys/kern/vfs_vnops.c32
-rw-r--r--sys/sys/file.h19
-rw-r--r--sys/sys/socketvar.h7
-rw-r--r--sys/sys/vnode.h5
16 files changed, 101 insertions, 82 deletions
diff --git a/sys/alpha/osf1/osf1_misc.c b/sys/alpha/osf1/osf1_misc.c
index 0b74fab5537e..8dca370e9e83 100644
--- a/sys/alpha/osf1/osf1_misc.c
+++ b/sys/alpha/osf1/osf1_misc.c
@@ -618,7 +618,7 @@ osf1_stat(td, uap)
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 @@ osf1_lstat(td, uap)
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 @@ osf1_fstat(td, uap)
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)
diff --git a/sys/compat/linux/linux_stats.c b/sys/compat/linux/linux_stats.c
index e99bc67d4147..ad90ffc29873 100644
--- a/sys/compat/linux/linux_stats.c
+++ b/sys/compat/linux/linux_stats.c
@@ -112,7 +112,7 @@ linux_newstat(struct thread *td, struct linux_newstat_args *args)
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 @@ linux_newlstat(struct thread *td, struct linux_newlstat_args *args)
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 @@ linux_newfstat(struct thread *td, struct linux_newfstat_args *args)
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 @@ linux_stat64(struct thread *td, struct linux_stat64_args *args)
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 @@ linux_lstat64(struct thread *td, struct linux_lstat64_args *args)
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 @@ linux_fstat64(struct thread *td, struct linux_fstat64_args *args)
(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);
diff --git a/sys/fs/fdescfs/fdesc_vnops.c b/sys/fs/fdescfs/fdesc_vnops.c
index 1cc8db5b9985..543802495597 100644
--- a/sys/fs/fdescfs/fdesc_vnops.c
+++ b/sys/fs/fdescfs/fdesc_vnops.c
@@ -302,7 +302,7 @@ fdesc_getattr(ap)
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);
diff --git a/sys/fs/fifofs/fifo_vnops.c b/sys/fs/fifofs/fifo_vnops.c
index 36e8f7cf17ac..f862309a4430 100644
--- a/sys/fs/fifofs/fifo_vnops.c
+++ b/sys/fs/fifofs/fifo_vnops.c
@@ -474,9 +474,10 @@ fifo_poll(ap)
}
filetmp.f_data = (caddr_t)ap->a_vp->v_fifoinfo->fi_readsock;
+ 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);
/* Reverse the above conversion. */
if ((revents & POLLINIGNEOF) &&
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index f29142493be9..bc09bfd19d76 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -103,9 +103,10 @@ static int badfo_readwrite(struct file *fp, struct uio *uio,
static int badfo_ioctl(struct file *fp, u_long com, void *data,
struct thread *td);
static int badfo_poll(struct file *fp, int events,
- struct ucred *cred, struct thread *td);
+ struct ucred *active_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_stat(struct file *fp, struct stat *sb,
+ struct ucred *active_cred, struct thread *td);
static int badfo_close(struct file *fp, struct thread *td);
/*
@@ -831,7 +832,7 @@ ofstat(td, uap)
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));
@@ -868,7 +869,7 @@ fstat(td, uap)
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);
@@ -903,7 +904,7 @@ nfstat(td, uap)
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));
@@ -2169,10 +2170,10 @@ badfo_ioctl(fp, com, data, td)
}
static int
-badfo_poll(fp, events, cred, td)
+badfo_poll(fp, events, active_cred, td)
struct file *fp;
int events;
- struct ucred *cred;
+ struct ucred *active_cred;
struct thread *td;
{
@@ -2189,9 +2190,10 @@ badfo_kqfilter(fp, kn)
}
static int
-badfo_stat(fp, sb, td)
+badfo_stat(fp, sb, active_cred, td)
struct file *fp;
struct stat *sb;
+ struct ucred *active_cred;
struct thread *td;
{
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c
index 723565c24956..abc1f2466b4f 100644
--- a/sys/kern/kern_event.c
+++ b/sys/kern/kern_event.c
@@ -62,10 +62,11 @@ static int kqueue_write(struct file *fp, struct uio *uio,
struct ucred *active_cred, int flags, struct thread *td);
static int kqueue_ioctl(struct file *fp, u_long com, void *data,
struct thread *td);
-static int kqueue_poll(struct file *fp, int events, struct ucred *cred,
- struct thread *td);
+static int kqueue_poll(struct file *fp, int events,
+ struct ucred *active_cred, struct thread *td);
static int kqueue_kqfilter(struct file *fp, struct knote *kn);
-static int kqueue_stat(struct file *fp, struct stat *st, struct thread *td);
+static int kqueue_stat(struct file *fp, struct stat *st,
+ struct ucred *active_cred, struct thread *td);
static int kqueue_close(struct file *fp, struct thread *td);
static void kqueue_wakeup(struct kqueue *kq);
@@ -800,7 +801,8 @@ kqueue_ioctl(struct file *fp, u_long com, void *data, struct thread *td)
/*ARGSUSED*/
static int
-kqueue_poll(struct file *fp, int events, struct ucred *cred, struct thread *td)
+kqueue_poll(struct file *fp, int events, struct ucred *active_cred,
+ struct thread *td)
{
struct kqueue *kq;
int revents = 0;
@@ -821,7 +823,8 @@ kqueue_poll(struct file *fp, int events, struct ucred *cred, struct thread *td)
/*ARGSUSED*/
static int
-kqueue_stat(struct file *fp, struct stat *st, struct thread *td)
+kqueue_stat(struct file *fp, struct stat *st, struct ucred *active_cred,
+ struct thread *td)
{
struct kqueue *kq;
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index ebe61b3e9d22..55babb219a48 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -899,7 +899,8 @@ selscan(td, ibits, obits, nfd)
FILEDESC_UNLOCK(fdp);
return (EBADF);
}
- if (fo_poll(fp, flag[msk], fp->f_cred, td)) {
+ if (fo_poll(fp, flag[msk], td->td_ucred,
+ td)) {
obits[msk][(fd)/NFDBITS] |=
((fd_mask)1 << ((fd) % NFDBITS));
n++;
@@ -1072,7 +1073,7 @@ pollscan(td, fds, nfd)
* POLLERR if appropriate.
*/
fds->revents = fo_poll(fp, fds->events,
- fp->f_cred, td);
+ td->td_ucred, td);
if (fds->revents != 0)
n++;
}
diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c
index cfba2de07d6a..4873f808c64f 100644
--- a/sys/kern/sys_pipe.c
+++ b/sys/kern/sys_pipe.c
@@ -99,12 +99,13 @@ static int pipe_read(struct file *fp, struct uio *uio,
static int pipe_write(struct file *fp, struct uio *uio,
struct ucred *active_cred, int flags, struct thread *td);
static int pipe_close(struct file *fp, struct thread *td);
-static int pipe_poll(struct file *fp, int events, struct ucred *cred,
+static int pipe_poll(struct file *fp, int events, struct ucred *active_cred,
struct thread *td);
static int pipe_kqfilter(struct file *fp, struct knote *kn);
-static int pipe_stat(struct file *fp, struct stat *sb, struct thread *td);
+static int pipe_stat(struct file *fp, struct stat *sb,
+ struct ucred *active_cred, struct thread *td);
static int pipe_ioctl(struct file *fp, u_long cmd, void *data,
- struct thread *td);
+ struct thread *td);
static struct fileops pipeops = {
pipe_read, pipe_write, pipe_ioctl, pipe_poll, pipe_kqfilter,
@@ -1215,10 +1216,10 @@ pipe_ioctl(fp, cmd, data, td)
}
int
-pipe_poll(fp, events, cred, td)
+pipe_poll(fp, events, active_cred, td)
struct file *fp;
int events;
- struct ucred *cred;
+ struct ucred *active_cred;
struct thread *td;
{
struct pipe *rpipe = (struct pipe *)fp->f_data;
@@ -1231,7 +1232,7 @@ pipe_poll(fp, events, cred, td)
wpipe = rpipe->pipe_peer;
PIPE_LOCK(rpipe);
#ifdef MAC
- error = mac_check_pipe_op(td->td_ucred, rpipe, MAC_OP_PIPE_POLL);
+ error = mac_check_pipe_op(active_cred, rpipe, MAC_OP_PIPE_POLL);
if (error)
goto locked_error;
#endif
@@ -1276,9 +1277,10 @@ locked_error:
* be a natural race.
*/
static int
-pipe_stat(fp, ub, td)
+pipe_stat(fp, ub, active_cred, td)
struct file *fp;
struct stat *ub;
+ struct ucred *active_cred;
struct thread *td;
{
struct pipe *pipe = (struct pipe *)fp->f_data;
@@ -1286,7 +1288,7 @@ pipe_stat(fp, ub, td)
int error;
/* XXXMAC: Pipe should be locked for this check. */
- error = mac_check_pipe_op(td->td_ucred, pipe, MAC_OP_PIPE_STAT);
+ error = mac_check_pipe_op(active_cred, pipe, MAC_OP_PIPE_STAT);
if (error)
return (error);
#endif
diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c
index 19f4d9b6620d..53ca5b911e39 100644
--- a/sys/kern/sys_socket.c
+++ b/sys/kern/sys_socket.c
@@ -157,20 +157,22 @@ soo_ioctl(fp, cmd, data, td)
}
int
-soo_poll(fp, events, cred, td)
+soo_poll(fp, events, active_cred, td)
struct file *fp;
int events;
- struct ucred *cred;
+ struct ucred *active_cred;
struct thread *td;
{
struct socket *so = (struct socket *)fp->f_data;
- return so->so_proto->pr_usrreqs->pru_sopoll(so, events, cred, td);
+ return so->so_proto->pr_usrreqs->pru_sopoll(so, events,
+ fp->f_cred, td);
}
int
-soo_stat(fp, ub, td)
+soo_stat(fp, ub, active_cred, td)
struct file *fp;
struct stat *ub;
+ struct ucred *active_cred;
struct thread *td;
{
struct socket *so = (struct socket *)fp->f_data;
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 61cef6192e16..7b71f007feb2 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -1687,7 +1687,8 @@ sohasoutofband(so)
}
int
-sopoll(struct socket *so, int events, struct ucred *cred, struct thread *td)
+sopoll(struct socket *so, int events, struct ucred *active_cred,
+ struct thread *td)
{
int revents = 0;
int s = splnet();
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c
index 197829bd6f83..39f842309deb 100644
--- a/sys/kern/vfs_extattr.c
+++ b/sys/kern/vfs_extattr.c
@@ -1435,7 +1435,7 @@ ostat(td, uap)
if ((error = namei(&nd)) != 0)
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);
@@ -1473,7 +1473,7 @@ olstat(td, uap)
if ((error = namei(&nd)) != 0)
return (error);
vp = nd.ni_vp;
- error = vn_stat(vp, &sb, td);
+ error = vn_stat(vp, &sb, td->td_ucred, NOCRED, td);
NDFREE(&nd, NDF_ONLY_PNBUF);
vput(vp);
if (error)
@@ -1544,7 +1544,7 @@ stat(td, uap)
#endif
if ((error = namei(&nd)) != 0)
return (error);
- error = vn_stat(nd.ni_vp, &sb, td);
+ error = vn_stat(nd.ni_vp, &sb, td->td_ucred, NOCRED, td);
NDFREE(&nd, NDF_ONLY_PNBUF);
vput(nd.ni_vp);
if (error)
@@ -1581,7 +1581,7 @@ lstat(td, uap)
if ((error = namei(&nd)) != 0)
return (error);
vp = nd.ni_vp;
- error = vn_stat(vp, &sb, td);
+ error = vn_stat(vp, &sb, td->td_ucred, NOCRED, td);
NDFREE(&nd, NDF_ONLY_PNBUF);
vput(vp);
if (error)
@@ -1646,7 +1646,7 @@ nstat(td, uap)
if ((error = namei(&nd)) != 0)
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);
@@ -1685,7 +1685,7 @@ nlstat(td, uap)
return (error);
vp = nd.ni_vp;
NDFREE(&nd, NDF_ONLY_PNBUF);
- error = vn_stat(vp, &sb, td);
+ error = vn_stat(vp, &sb, td->td_ucred, NOCRED, td);
vput(vp);
if (error)
return (error);
@@ -3478,7 +3478,7 @@ fhstat(td, uap)
return (ESTALE);
if ((error = VFS_FHTOVP(mp, &fh.fh_fid, &vp)))
return (error);
- error = vn_stat(vp, &sb, td);
+ error = vn_stat(vp, &sb, td->td_ucred, NOCRED, td);
vput(vp);
if (error)
return (error);
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 197829bd6f83..39f842309deb 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -1435,7 +1435,7 @@ ostat(td, uap)
if ((error = namei(&nd)) != 0)
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);
@@ -1473,7 +1473,7 @@ olstat(td, uap)
if ((error = namei(&nd)) != 0)
return (error);
vp = nd.ni_vp;
- error = vn_stat(vp, &sb, td);
+ error = vn_stat(vp, &sb, td->td_ucred, NOCRED, td);
NDFREE(&nd, NDF_ONLY_PNBUF);
vput(vp);
if (error)
@@ -1544,7 +1544,7 @@ stat(td, uap)
#endif
if ((error = namei(&nd)) != 0)
return (error);
- error = vn_stat(nd.ni_vp, &sb, td);
+ error = vn_stat(nd.ni_vp, &sb, td->td_ucred, NOCRED, td);
NDFREE(&nd, NDF_ONLY_PNBUF);
vput(nd.ni_vp);
if (error)
@@ -1581,7 +1581,7 @@ lstat(td, uap)
if ((error = namei(&nd)) != 0)
return (error);
vp = nd.ni_vp;
- error = vn_stat(vp, &sb, td);
+ error = vn_stat(vp, &sb, td->td_ucred, NOCRED, td);
NDFREE(&nd, NDF_ONLY_PNBUF);
vput(vp);
if (error)
@@ -1646,7 +1646,7 @@ nstat(td, uap)
if ((error = namei(&nd)) != 0)
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);
@@ -1685,7 +1685,7 @@ nlstat(td, uap)
return (error);
vp = nd.ni_vp;
NDFREE(&nd, NDF_ONLY_PNBUF);
- error = vn_stat(vp, &sb, td);
+ error = vn_stat(vp, &sb, td->td_ucred, NOCRED, td);
vput(vp);
if (error)
return (error);
@@ -3478,7 +3478,7 @@ fhstat(td, uap)
return (ESTALE);
if ((error = VFS_FHTOVP(mp, &fh.fh_fid, &vp)))
return (error);
- error = vn_stat(vp, &sb, td);
+ error = vn_stat(vp, &sb, td->td_ucred, NOCRED, td);
vput(vp);
if (error)
return (error);
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index fdde26d75d78..af5faedbb568 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -68,10 +68,11 @@ static int vn_ioctl(struct file *fp, u_long com, void *data,
struct thread *td);
static int vn_read(struct file *fp, struct uio *uio,
struct ucred *active_cred, int flags, struct thread *td);
-static int vn_poll(struct file *fp, int events, struct ucred *cred,
+static int vn_poll(struct file *fp, int events, struct ucred *active_cred,
struct thread *td);
static int vn_kqfilter(struct file *fp, struct knote *kn);
-static int vn_statfile(struct file *fp, struct stat *sb, struct thread *td);
+static int vn_statfile(struct file *fp, struct stat *sb,
+ struct ucred *active_cred, struct thread *td);
static int vn_write(struct file *fp, struct uio *uio,
struct ucred *active_cred, int flags, struct thread *td);
@@ -295,17 +296,17 @@ vn_writechk(vp)
* Vnode close call
*/
int
-vn_close(vp, flags, cred, td)
+vn_close(vp, flags, file_cred, td)
register struct vnode *vp;
int flags;
- struct ucred *cred;
+ struct ucred *file_cred;
struct thread *td;
{
int error;
if (flags & FWRITE)
vp->v_writecount--;
- error = VOP_CLOSE(vp, flags, cred, td);
+ error = VOP_CLOSE(vp, flags, file_cred, td);
/*
* XXX - In certain instances VOP_CLOSE has to do the vrele
* itself. If the vrele has been done, it will return EAGAIN
@@ -578,16 +579,17 @@ vn_write(fp, uio, active_cred, flags, td)
* File table vnode stat routine.
*/
static int
-vn_statfile(fp, sb, td)
+vn_statfile(fp, sb, active_cred, td)
struct file *fp;
struct stat *sb;
+ struct ucred *active_cred;
struct thread *td;
{
struct vnode *vp = (struct vnode *)fp->f_data;
int error;
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
- error = vn_stat(vp, sb, td);
+ error = vn_stat(vp, sb, active_cred, fp->f_cred, td);
VOP_UNLOCK(vp, 0, td);
return (error);
@@ -597,9 +599,11 @@ vn_statfile(fp, sb, td)
* Stat a vnode; implementation for the stat syscall
*/
int
-vn_stat(vp, sb, td)
+vn_stat(vp, sb, active_cred, file_cred, td)
struct vnode *vp;
register struct stat *sb;
+ struct ucred *active_cred;
+ struct ucred *file_cred;
struct thread *td;
{
struct vattr vattr;
@@ -608,13 +612,13 @@ vn_stat(vp, sb, td)
u_short mode;
#ifdef MAC
- error = mac_check_vnode_stat(td->td_ucred, vp);
+ error = mac_check_vnode_stat(active_cred, vp);
if (error)
return (error);
#endif
vap = &vattr;
- error = VOP_GETATTR(vp, vap, td->td_ucred, td);
+ error = VOP_GETATTR(vp, vap, active_cred, td);
if (error)
return (error);
@@ -788,10 +792,10 @@ vn_ioctl(fp, com, data, td)
* File table vnode poll routine.
*/
static int
-vn_poll(fp, events, cred, td)
+vn_poll(fp, events, active_cred, td)
struct file *fp;
int events;
- struct ucred *cred;
+ struct ucred *active_cred;
struct thread *td;
{
struct vnode *vp;
@@ -802,13 +806,13 @@ vn_poll(fp, events, cred, td)
vp = (struct vnode *)fp->f_data;
#ifdef MAC
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
- error = mac_check_vnode_op(cred, vp, MAC_OP_VNODE_POLL);
+ error = mac_check_vnode_op(active_cred, vp, MAC_OP_VNODE_POLL);
VOP_UNLOCK(vp, 0, td);
if (error)
return (error);
#endif
- return (VOP_POLL(vp, events, cred, td));
+ return (VOP_POLL(vp, events, fp->f_cred, td));
}
/*
diff --git a/sys/sys/file.h b/sys/sys/file.h
index d2e31d23db51..9b1ad41dc756 100644
--- a/sys/sys/file.h
+++ b/sys/sys/file.h
@@ -90,10 +90,10 @@ struct file {
int (*fo_ioctl)(struct file *fp, u_long com, void *data,
struct thread *td);
int (*fo_poll)(struct file *fp, int events,
- struct ucred *cred, struct thread *td);
+ struct ucred *active_cred, struct thread *td);
int (*fo_kqfilter)(struct file *fp, struct knote *kn);
int (*fo_stat)(struct file *fp, struct stat *sb,
- struct thread *td);
+ struct ucred *active_cred, struct thread *td);
int (*fo_close)(struct file *fp, struct thread *td);
} *f_ops;
int f_seqcount; /*
@@ -182,9 +182,9 @@ static __inline int fo_write(struct file *fp, struct uio *uio,
static __inline int fo_ioctl(struct file *fp, u_long com, void *data,
struct thread *td);
static __inline int fo_poll(struct file *fp, int events,
- struct ucred *cred, struct thread *td);
+ struct ucred *active_cred, struct thread *td);
static __inline int fo_stat(struct file *fp, struct stat *sb,
- struct thread *td);
+ struct ucred *active_cred, struct thread *td);
static __inline int fo_close(struct file *fp, struct thread *td);
static __inline int fo_kqfilter(struct file *fp, struct knote *kn);
struct proc;
@@ -225,24 +225,25 @@ fo_ioctl(fp, com, data, td)
}
static __inline int
-fo_poll(fp, events, cred, td)
+fo_poll(fp, events, active_cred, td)
struct file *fp;
int events;
- struct ucred *cred;
+ struct ucred *active_cred;
struct thread *td;
{
- return ((*fp->f_ops->fo_poll)(fp, events, cred, td));
+ return ((*fp->f_ops->fo_poll)(fp, events, active_cred, td));
}
static __inline int
-fo_stat(fp, sb, td)
+fo_stat(fp, sb, active_cred, td)
struct file *fp;
struct stat *sb;
+ struct ucred *active_cred;
struct thread *td;
{
- return ((*fp->f_ops->fo_stat)(fp, sb, td));
+ return ((*fp->f_ops->fo_stat)(fp, sb, active_cred, td));
}
static __inline int
diff --git a/sys/sys/socketvar.h b/sys/sys/socketvar.h
index e5979519ac52..e352b4f64fda 100644
--- a/sys/sys/socketvar.h
+++ b/sys/sys/socketvar.h
@@ -352,9 +352,10 @@ int soo_write(struct file *fp, struct uio *uio,
int soo_close(struct file *fp, struct thread *td);
int soo_ioctl(struct file *fp, u_long cmd, void *data,
struct thread *td);
-int soo_poll(struct file *fp, int events, struct ucred *cred,
+int soo_poll(struct file *fp, int events, struct ucred *active_cred,
+ struct thread *td);
+int soo_stat(struct file *fp, struct stat *ub, struct ucred *active_cred,
struct thread *td);
-int soo_stat(struct file *fp, struct stat *ub, struct thread *td);
int sokqfilter(struct file *fp, struct knote *kn);
/*
@@ -418,7 +419,7 @@ int soopt_getm(struct sockopt *sopt, struct mbuf **mp);
int soopt_mcopyin(struct sockopt *sopt, struct mbuf *m);
int soopt_mcopyout(struct sockopt *sopt, struct mbuf *m);
-int sopoll(struct socket *so, int events, struct ucred *cred,
+int sopoll(struct socket *so, int events, struct ucred *active_cred,
struct thread *td);
int soreceive(struct socket *so, struct sockaddr **paddr, struct uio *uio,
struct mbuf **mp0, struct mbuf **controlp, int *flagsp);
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index 8bd1bacfdfbd..d977be3d0910 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -701,7 +701,7 @@ void vprint(char *label, struct vnode *vp);
int vrecycle(struct vnode *vp, struct mtx *inter_lkp,
struct thread *td);
int vn_close(struct vnode *vp,
- int flags, struct ucred *cred, struct thread *td);
+ int flags, struct ucred *file_cred, struct thread *td);
void vn_finished_write(struct mount *mp);
int vn_isdisk(struct vnode *vp, int *errp);
int vn_lock(struct vnode *vp, int flags, struct thread *td);
@@ -725,7 +725,8 @@ int vn_rdwr_inchunks(enum uio_rw rw, struct vnode *vp, caddr_t base,
int len, off_t offset, enum uio_seg segflg, int ioflg,
struct ucred *active_cred, struct ucred *file_cred, int *aresid,
struct thread *td);
-int vn_stat(struct vnode *vp, struct stat *sb, struct thread *td);
+int vn_stat(struct vnode *vp, struct stat *sb, struct ucred *active_cred,
+ struct ucred *file_cred, struct thread *td);
int vn_start_write(struct vnode *vp, struct mount **mpp, int flags);
dev_t vn_todev(struct vnode *vp);
int vn_write_suspend_wait(struct vnode *vp, struct mount *mp,