aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/dcache.c6
-rw-r--r--fs/seq_file.c2
-rw-r--r--security/apparmor/path.c2
-rw-r--r--security/tomoyo/realpath.c2
4 files changed, 4 insertions, 8 deletions
diff --git a/fs/dcache.c b/fs/dcache.c
index 83293be48149..54f93f5e6b0f 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -1994,7 +1994,7 @@ global_root:
1994 * Returns a pointer into the buffer or an error code if the 1994 * Returns a pointer into the buffer or an error code if the
1995 * path was too long. 1995 * path was too long.
1996 * 1996 *
1997 * "buflen" should be positive. Caller holds the dcache_lock. 1997 * "buflen" should be positive.
1998 * 1998 *
1999 * If path is not reachable from the supplied root, then the value of 1999 * If path is not reachable from the supplied root, then the value of
2000 * root is changed (without modifying refcounts). 2000 * root is changed (without modifying refcounts).
@@ -2006,10 +2006,12 @@ char *__d_path(const struct path *path, struct path *root,
2006 int error; 2006 int error;
2007 2007
2008 prepend(&res, &buflen, "\0", 1); 2008 prepend(&res, &buflen, "\0", 1);
2009 spin_lock(&dcache_lock);
2009 error = prepend_path(path, root, &res, &buflen); 2010 error = prepend_path(path, root, &res, &buflen);
2011 spin_unlock(&dcache_lock);
2012
2010 if (error) 2013 if (error)
2011 return ERR_PTR(error); 2014 return ERR_PTR(error);
2012
2013 return res; 2015 return res;
2014} 2016}
2015 2017
diff --git a/fs/seq_file.c b/fs/seq_file.c
index 0e7cb1395a94..05d6b0e78c95 100644
--- a/fs/seq_file.c
+++ b/fs/seq_file.c
@@ -462,9 +462,7 @@ int seq_path_root(struct seq_file *m, struct path *path, struct path *root,
462 if (size) { 462 if (size) {
463 char *p; 463 char *p;
464 464
465 spin_lock(&dcache_lock);
466 p = __d_path(path, root, buf, size); 465 p = __d_path(path, root, buf, size);
467 spin_unlock(&dcache_lock);
468 res = PTR_ERR(p); 466 res = PTR_ERR(p);
469 if (!IS_ERR(p)) { 467 if (!IS_ERR(p)) {
470 char *end = mangle_path(buf, p, esc); 468 char *end = mangle_path(buf, p, esc);
diff --git a/security/apparmor/path.c b/security/apparmor/path.c
index 82396050f186..36cc0cc39e78 100644
--- a/security/apparmor/path.c
+++ b/security/apparmor/path.c
@@ -72,10 +72,8 @@ static int d_namespace_path(struct path *path, char *buf, int buflen,
72 path_get(&root); 72 path_get(&root);
73 } 73 }
74 74
75 spin_lock(&dcache_lock);
76 tmp = root; 75 tmp = root;
77 res = __d_path(path, &tmp, buf, buflen); 76 res = __d_path(path, &tmp, buf, buflen);
78 spin_unlock(&dcache_lock);
79 77
80 *name = res; 78 *name = res;
81 /* handle error conditions - and still allow a partial path to 79 /* handle error conditions - and still allow a partial path to
diff --git a/security/tomoyo/realpath.c b/security/tomoyo/realpath.c
index ed8ccd680102..1d0bf8fa1922 100644
--- a/security/tomoyo/realpath.c
+++ b/security/tomoyo/realpath.c
@@ -127,10 +127,8 @@ char *tomoyo_realpath_from_path(struct path *path)
127 /* If we don't have a vfsmount, we can't calculate. */ 127 /* If we don't have a vfsmount, we can't calculate. */
128 if (!path->mnt) 128 if (!path->mnt)
129 break; 129 break;
130 spin_lock(&dcache_lock);
131 /* go to whatever namespace root we are under */ 130 /* go to whatever namespace root we are under */
132 pos = __d_path(path, &ns_root, buf, buf_len); 131 pos = __d_path(path, &ns_root, buf, buf_len);
133 spin_unlock(&dcache_lock);
134 /* Prepend "/proc" prefix if using internal proc vfs mount. */ 132 /* Prepend "/proc" prefix if using internal proc vfs mount. */
135 if (!IS_ERR(pos) && (path->mnt->mnt_flags & MNT_INTERNAL) && 133 if (!IS_ERR(pos) && (path->mnt->mnt_flags & MNT_INTERNAL) &&
136 (path->mnt->mnt_sb->s_magic == PROC_SUPER_MAGIC)) { 134 (path->mnt->mnt_sb->s_magic == PROC_SUPER_MAGIC)) {