Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1380823 > unrolled thread

[PATCH 1/2] kernfs_path_from_node_locked: don't overwrite nlen

Started byserge.hallyn@ubuntu.com
First post2016-04-17 22:10 +0200
Last post2016-04-20 21:50 +0200
Articles 2 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 1/2] kernfs_path_from_node_locked: don't overwrite nlen serge.hallyn@ubuntu.com - 2016-04-17 22:10 +0200
    Re: [PATCH 1/2] kernfs_path_from_node_locked: don't overwrite nlen Tejun Heo <tj@kernel.org> - 2016-04-20 21:50 +0200

#1380823 — [PATCH 1/2] kernfs_path_from_node_locked: don't overwrite nlen

Fromserge.hallyn@ubuntu.com
Date2016-04-17 22:10 +0200
Subject[PATCH 1/2] kernfs_path_from_node_locked: don't overwrite nlen
Message-ID<rp1b4-1ts-7@gated-at.bofh.it>
From: Serge Hallyn <serge.hallyn@ubuntu.com>

We've calculated @len to be the bytes we need for '/..' entries from
@kn_from to the common ancestor, and calculated @nlen to be the extra
bytes we need to get from the common ancestor to @kn_to.  We use them
as such at the end.  But in the loop copying the actual entries, we
overwrite @nlen.  Use a temporary variable for that instead.

Without this, the return length, when the buffer is large enough, is
wrong.  (When the buffer is NULL or too small, the returned value is
correct. The buffer contents are also correct.)

Interestingly, no callers of this function are affected by this as of
yet.  However the upcoming cgroup_show_path() will be.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
---
 fs/kernfs/dir.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
index 03b688d..37f9678 100644
--- a/fs/kernfs/dir.c
+++ b/fs/kernfs/dir.c
@@ -153,9 +153,9 @@ static int kernfs_path_from_node_locked(struct kernfs_node *kn_to,
 	p = buf + len + nlen;
 	*p = '\0';
 	for (kn = kn_to; kn != common; kn = kn->parent) {
-		nlen = strlen(kn->name);
-		p -= nlen;
-		memcpy(p, kn->name, nlen);
+		size_t tmp = strlen(kn->name);
+		p -= tmp;
+		memcpy(p, kn->name, tmp);
 		*(--p) = '/';
 	}
 
-- 
2.7.4

[toc] | [next] | [standalone]


#1383710

FromTejun Heo <tj@kernel.org>
Date2016-04-20 21:50 +0200
Message-ID<rq6in-4F2-37@gated-at.bofh.it>
In reply to#1380823
On Sun, Apr 17, 2016 at 03:04:31PM -0500, serge.hallyn@ubuntu.com wrote:
> From: Serge Hallyn <serge.hallyn@ubuntu.com>
> 
> We've calculated @len to be the bytes we need for '/..' entries from
> @kn_from to the common ancestor, and calculated @nlen to be the extra
> bytes we need to get from the common ancestor to @kn_to.  We use them
> as such at the end.  But in the loop copying the actual entries, we
> overwrite @nlen.  Use a temporary variable for that instead.
> 
> Without this, the return length, when the buffer is large enough, is
> wrong.  (When the buffer is NULL or too small, the returned value is
> correct. The buffer contents are also correct.)
> 
> Interestingly, no callers of this function are affected by this as of
> yet.  However the upcoming cgroup_show_path() will be.
> 
> Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>

Acked-by: Tejun Heo <tj@kernel.org>

Greg, can you please pick this one up for v4.6?

Thanks.

-- 
tejun

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web