Skip to contentSkip to conversation

dcache: trivial comment fix

PATCH New J. Bruce Fields 2 participants 4 messages Oct 16, 2007 – Oct 22, 2007 VFS

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 dcache: trivial comment fix

From: J. Bruce Fields <[email protected]>

As it stands this comment is confusing, and not quite grammatical.

---
 fs/dcache.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
fs/dcache.c +2 -2
index 7da0cf5..5663a31 100644
@@ -1514,8 +1514,8 @@ static void switch_names(struct dentry *dentry, struct dentry *target)
  * This forceful removal will result in ugly /proc output if
  * somebody holds a file open that got deleted due to a rename.
  * We could be nicer about the deleted file, and let it show
- * up under the name it got deleted rather than the name that
- * deleted it.
+ * up under the name it had before it was deleted rather than
+ * the original name of the file that was moved on top of it.
  */
  
 /*
Signature · 1 line
1.5.3.4.208.gc990
#1 lore raw

PATCH 1/1 dcache: don't expose uninitialized memory in /proc/<pid>/fd/<fd>

From: J. Bruce Fields <[email protected]>

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.

---
 fs/dcache.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

(Am I missing something? I've also 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>.)

fs/dcache.c +2 -0
index 5663a31..24252fc 100644
@@ -1483,6 +1483,8 @@ static void switch_names(struct dentry *dentry, struct dentry *target)
 			 * dentry:internal, target:external.  Steal target's
 			 * 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;
 			target->d_name.name = target->d_iname;
 		}
Signature · 1 line
1.5.3.4.208.gc990
#2 lore raw

Re: [PATCH] dcache: don't expose uninitialized memory in /proc/<pid>/fd/<fd>

Quoted 8 lines · On Tue, 16 Oct 2007 15:35:57 -0400 "J. Bruce Fields" <[email protected]>…

From: J. Bruce Fields <[email protected]>

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.

hm, that was tricky.

Quoted 14 lines
---
 fs/dcache.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

(Am I missing something? I've also 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>.)

fs/dcache.c +0 -0
index 5663a31..24252fc 100644

fs/dcache.c static void switch_names(struct dentry *dentry, struct dentry *target) · line 1490

Quoted 8 lines
fs/dcache.c +2 -0
@@ -1483,6 +1483,8 @@ static void switch_names(struct dentry *dentry, struct dentry *target)
 			 * dentry:internal, target:external.  Steal target's
 			 * 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;
 			target->d_name.name = target->d_iname;
 		}

Or we could just stick a \0 in there.

Or perhaps we should set it to "(deleted file)"?

#3 lore raw

Re: [PATCH] dcache: don't expose uninitialized memory in /proc/<pid>/fd/<fd>

Sorry for the delayed response:

Quoted 23 lines · Andrew Morton
Quoted 8 lines · On Tue, 16 Oct 2007 15:35:57 -0400 "J. Bruce Fields" <[email protected]>…

From: J. Bruce Fields <[email protected]>

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.

hm, that was tricky.

Quoted 9 lines
---
 fs/dcache.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

(Am I missing something? I've also 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>.)

Quoted 15 lines

fs/dcache.c static void switch_names(struct dentry *dentry, struct dentry *target) · line 1490

Quoted 13 lines
fs/dcache.c +2 -0
index 5663a31..24252fc 100644
@@ -1483,6 +1483,8 @@ static void switch_names(struct dentry *dentry, struct dentry *target)
 			 * dentry:internal, target:external.  Steal target's
 			 * 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;
 			target->d_name.name = target->d_iname;
 		}

Or we could just stick a \0 in there.

The memcpy() makes the behavior agree with the code comments, and with what the kernel normally otherwise does. But, yeah, just making it a null string would probably be reasonable too.

Quoted 1 line

Or perhaps we should set it to "(deleted file)"?

Looks like __d_path already adds a (deleted) for us, so that'de be redundant.

--b.