Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+3 -8
+3 -8
fs/ocfs2/dcache.c
··· 45 45 inode = d_inode(dentry); 46 46 osb = OCFS2_SB(dentry->d_sb); 47 47 48 - trace_ocfs2_dentry_revalidate(dentry, dentry->d_name.len, 49 - dentry->d_name.name); 48 + trace_ocfs2_dentry_revalidate(dentry, name->len, name->name); 50 49 51 50 /* For a negative dentry - 52 51 * check the generation number of the parent and compare with the ··· 53 54 */ 54 55 if (inode == NULL) { 55 56 unsigned long gen = (unsigned long) dentry->d_fsdata; 56 - unsigned long pgen; 57 - spin_lock(&dentry->d_lock); 58 - pgen = OCFS2_I(d_inode(dentry->d_parent))->ip_dir_lock_gen; 59 - spin_unlock(&dentry->d_lock); 60 - trace_ocfs2_dentry_revalidate_negative(dentry->d_name.len, 61 - dentry->d_name.name, 57 + unsigned long pgen = OCFS2_I(dir)->ip_dir_lock_gen; 58 + trace_ocfs2_dentry_revalidate_negative(name->len, name->name, 62 59 pgen, gen); 63 60 if (gen != pgen) 64 61 goto bail;