From 3246fbf45f089a96288563f2d5071bfbde5f99df Mon Sep 17 00:00:00 2001 From: rwatson Date: Sat, 17 Aug 2002 02:36:16 +0000 Subject: In continuation of early fileop credential changes, modify fo_ioctl() to accept an 'active_cred' argument reflecting the credential of the thread initiating the ioctl operation. - Change fo_ioctl() to accept active_cred; change consumers of the fo_ioctl() interface to generally pass active_cred from td->td_ucred. - In fifofs, initialize filetmp.f_cred to ap->a_cred so that the invocations of soo_ioctl() are provided access to the calling f_cred. Pass ap->a_td->td_ucred as the active_cred, but note that this is required because we don't yet distinguish file_cred and active_cred in invoking VOP's. - Update kqueue_ioctl() for its new argument. - Update pipe_ioctl() for its new argument, pass active_cred rather than td_ucred to MAC for authorization. - Update soo_ioctl() for its new argument. - Update vn_ioctl() for its new argument, use active_cred rather than td->td_ucred to authorize VOP_IOCTL() and the associated VOP_GETATTR(). Obtained from: TrustedBSD Project Sponsored by: DARPA, NAI Labs --- sys/dev/aac/aac.c | 2 +- sys/dev/drm/drm_drv.h | 4 ++++ sys/dev/tdfx/tdfx_pci.c | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) (limited to 'sys/dev') diff --git a/sys/dev/aac/aac.c b/sys/dev/aac/aac.c index 8b3b55e..6192550 100644 --- a/sys/dev/aac/aac.c +++ b/sys/dev/aac/aac.c @@ -2535,7 +2535,7 @@ aac_linux_ioctl(struct thread *td, struct linux_ioctl_args *args) /* * 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); } diff --git a/sys/dev/drm/drm_drv.h b/sys/dev/drm/drm_drv.h index 7013955..cb50e1e 100644 --- a/sys/dev/drm/drm_drv.h +++ b/sys/dev/drm/drm_drv.h @@ -1439,7 +1439,11 @@ DRM(linux_ioctl)(DRM_OS_STRUCTPROC *p, struct linux_ioctl_args* args) /* * Pass the ioctl off to our standard handler. */ +#if (__FreeBSD_version >= 500000) + return(fo_ioctl(fp, cmd, data, p->td_ucred, p)); +#else return(fo_ioctl(fp, cmd, data, p)); +#endif } #endif /* DRM_LINUX */ #endif /* __FreeBSD__ */ diff --git a/sys/dev/tdfx/tdfx_pci.c b/sys/dev/tdfx/tdfx_pci.c index 3184925..0530cd8 100644 --- a/sys/dev/tdfx/tdfx_pci.c +++ b/sys/dev/tdfx/tdfx_pci.c @@ -848,7 +848,7 @@ linux_ioctl_tdfx(struct thread *td, struct linux_ioctl_args* args) 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; } -- cgit v1.1