dcache: don't expose uninitialized memory in /proc/<pid>/fd/<fd>
Well, it's not especially important that target->d_iname get the contents of dentry->d_iname, but it's important that it get initialized with *something*, otherwise we're just exposing some random piece of memory to anyone who reads the link at /proc/<pid>/fd/<fd> for the deleted file, when it's still held open by someone. I've run a test program that copies a short (<36 character) name ontop of a long (>=36 character) name and see that the first time I run it, without this patch, I get unpredicatable results out of /proc/<pid>/fd/<fd>. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
b68680e473
commit
321bcf9216
1 changed files with 2 additions and 0 deletions
|
@ -1479,6 +1479,8 @@ static void switch_names(struct dentry *dentry, struct dentry *target)
|
||||||
* dentry:internal, target:external. Steal target's
|
* dentry:internal, target:external. Steal target's
|
||||||
* storage and make target internal.
|
* storage and make target internal.
|
||||||
*/
|
*/
|
||||||
|
memcpy(target->d_iname, dentry->d_name.name,
|
||||||
|
dentry->d_name.len + 1);
|
||||||
dentry->d_name.name = target->d_name.name;
|
dentry->d_name.name = target->d_name.name;
|
||||||
target->d_name.name = target->d_iname;
|
target->d_name.name = target->d_iname;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue