summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern')
-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
9 files changed, 71 insertions, 56 deletions
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index f291424..bc09bfd 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 723565c..abc1f24 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 ebe61b3..55babb2 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 cfba2de..4873f80 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 19f4d9b..53ca5b9 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 61cef61..7b71f00 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 197829b..39f8423 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 197829b..39f8423 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 fdde26d..af5faed 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));
}
/*
OpenPOWER on IntegriCloud