[PATCH 3.13 003/151] __dentry_path() fixes

Kamal Mostafa kamal at canonical.com
Fri May 2 15:36:31 UTC 2014


3.13.11.1 -stable review patch.  If anyone has any objections, please let me know.

------------------

From: Al Viro <viro at zeniv.linux.org.uk>

commit f6500801522c61782d4990fa1ad96154cb397cd4 upstream.

* we need to save the starting point for restarts
* reject pathologically short buffers outright

Spotted-by: Denys Vlasenko <dvlasenk at redhat.com>
Spotted-by: Oleg Nesterov <oleg at redhat.com>
Signed-off-by: Al Viro <viro at zeniv.linux.org.uk>
Cc: Mikulas Patocka <mpatocka at redhat.com>
Signed-off-by: Kamal Mostafa <kamal at canonical.com>
---
 fs/dcache.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/fs/dcache.c b/fs/dcache.c
index f7ad6d7..ca02c13 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -3116,19 +3116,22 @@ char *simple_dname(struct dentry *dentry, char *buffer, int buflen)
 /*
  * Write full pathname from the root of the filesystem into the buffer.
  */
-static char *__dentry_path(struct dentry *dentry, char *buf, int buflen)
+static char *__dentry_path(struct dentry *d, char *buf, int buflen)
 {
+	struct dentry *dentry;
 	char *end, *retval;
 	int len, seq = 0;
 	int error = 0;
 
+	if (buflen < 2)
+		goto Elong;
+
 	rcu_read_lock();
 restart:
+	dentry = d;
 	end = buf + buflen;
 	len = buflen;
 	prepend(&end, &len, "\0", 1);
-	if (buflen < 1)
-		goto Elong;
 	/* Get '/' right */
 	retval = end-1;
 	*retval = '/';
-- 
1.9.1





More information about the kernel-team mailing list