mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-04-13 09:59:31 +00:00
ocfs2_dentry_revalidate(): use stable parent inode and name passed by caller
theoretically, ->d_name use in there is a UAF, but only if you are messing with tracepoints... Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
ffeeaada2b
commit
9640fe5b5e
1 changed files with 3 additions and 8 deletions
|
@ -45,8 +45,7 @@ static int ocfs2_dentry_revalidate(struct inode *dir, const struct qstr *name,
|
|||
inode = d_inode(dentry);
|
||||
osb = OCFS2_SB(dentry->d_sb);
|
||||
|
||||
trace_ocfs2_dentry_revalidate(dentry, dentry->d_name.len,
|
||||
dentry->d_name.name);
|
||||
trace_ocfs2_dentry_revalidate(dentry, name->len, name->name);
|
||||
|
||||
/* For a negative dentry -
|
||||
* check the generation number of the parent and compare with the
|
||||
|
@ -54,12 +53,8 @@ static int ocfs2_dentry_revalidate(struct inode *dir, const struct qstr *name,
|
|||
*/
|
||||
if (inode == NULL) {
|
||||
unsigned long gen = (unsigned long) dentry->d_fsdata;
|
||||
unsigned long pgen;
|
||||
spin_lock(&dentry->d_lock);
|
||||
pgen = OCFS2_I(d_inode(dentry->d_parent))->ip_dir_lock_gen;
|
||||
spin_unlock(&dentry->d_lock);
|
||||
trace_ocfs2_dentry_revalidate_negative(dentry->d_name.len,
|
||||
dentry->d_name.name,
|
||||
unsigned long pgen = OCFS2_I(dir)->ip_dir_lock_gen;
|
||||
trace_ocfs2_dentry_revalidate_negative(name->len, name->name,
|
||||
pgen, gen);
|
||||
if (gen != pgen)
|
||||
goto bail;
|
||||
|
|
Loading…
Add table
Reference in a new issue