lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 5 May 2010 15:15:34 +0200 From: John Kacur <jkacur@...hat.com> To: lkml <linux-kernel@...r.kernel.org> Cc: John Kacur <jkacur@...hat.com>, Arnd Bergmann <arnd@...db.de>, Thomas Gleixner <tglx@...utronix.de>, Ingo Molnar <mingo@...e.hu>, Frederic Weisbecker <fweisbec@...il.com>, Jan Harkes <jaharkes@...cmu.edu>, coda@...cmu.edu Subject: [PATCH 1/6] coda: BKL ioctl pushdown Convert coda_pioctl to an unlocked_ioctl pushing down the BKL into it. Signed-off-by: John Kacur <jkacur@...hat.com> --- fs/coda/pioctl.c | 41 ++++++++++++++++++++++++----------------- 1 files changed, 24 insertions(+), 17 deletions(-) diff --git a/fs/coda/pioctl.c b/fs/coda/pioctl.c index 773f2ce..96ace2c 100644 --- a/fs/coda/pioctl.c +++ b/fs/coda/pioctl.c @@ -23,10 +23,12 @@ #include <linux/coda_fs_i.h> #include <linux/coda_psdev.h> +#include <linux/smp_lock.h> + /* pioctl ops */ static int coda_ioctl_permission(struct inode *inode, int mask); -static int coda_pioctl(struct inode * inode, struct file * filp, - unsigned int cmd, unsigned long user_data); +static long coda_pioctl(struct file *filp, unsigned int cmd, + unsigned long user_data); /* exported from this file */ const struct inode_operations coda_ioctl_inode_operations = @@ -37,7 +39,7 @@ const struct inode_operations coda_ioctl_inode_operations = const struct file_operations coda_ioctl_operations = { .owner = THIS_MODULE, - .ioctl = coda_pioctl, + .unlocked_ioctl = coda_pioctl, }; /* the coda pioctl inode ops */ @@ -46,40 +48,43 @@ static int coda_ioctl_permission(struct inode *inode, int mask) return (mask & MAY_EXEC) ? -EACCES : 0; } -static int coda_pioctl(struct inode * inode, struct file * filp, - unsigned int cmd, unsigned long user_data) +static long coda_pioctl(struct file *filp, unsigned int cmd, + unsigned long user_data) { struct path path; int error; struct PioctlData data; + struct inode *inode = filp->f_dentry->d_inode; struct inode *target_inode = NULL; struct coda_inode_info *cnp; + lock_kernel(); + /* get the Pioctl data arguments from user space */ if (copy_from_user(&data, (void __user *)user_data, sizeof(data))) { - return -EINVAL; + error = -EINVAL; + goto out; } /* * Look up the pathname. Note that the pathname is in * user memory, and namei takes care of this */ - if (data.follow) { + if (data.follow) error = user_path(data.path, &path); - } else { + else error = user_lpath(data.path, &path); - } - - if ( error ) { - return error; - } else { + + if (error) + goto out; + else target_inode = path.dentry->d_inode; - } - + /* return if it is not a Coda inode */ if ( target_inode->i_sb != inode->i_sb ) { path_put(&path); - return -EINVAL; + error = -EINVAL; + goto out; } /* now proceed to make the upcall */ @@ -88,6 +93,8 @@ static int coda_pioctl(struct inode * inode, struct file * filp, error = venus_pioctl(inode->i_sb, &(cnp->c_fid), cmd, &data); path_put(&path); + +out: + unlock_kernel(); return error; } - -- 1.6.6.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists