summaryrefslogtreecommitdiff
path: root/security/tomoyo/realpath.c
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2011-12-22 09:22:58 -0800
committerOlof Johansson <olof@lixom.net>2011-12-22 09:22:58 -0800
commit53bf82ce766b17436a6e9c672f9fa29702f3731e (patch)
tree50547bbc8d5c9f9156f1220b712a99e48dbaf43f /security/tomoyo/realpath.c
parent5e8d3183bb605a937fc89b857691f75682aa099e (diff)
parent4a4de1d9b47156525ceb46c7faf6ae4042d90aa7 (diff)
Merge branch 'omap/fixes-hwmod' into next/fixes-non-critical
* omap/fixes-hwmod: (359 commits) ARM: OMAP: hwmod data: fix the panic on Nokia RM-680 during boot ARM: OMAP: hwmod data: fix iva and mailbox hwmods for OMAP 3 ARM: OMAP: rx51: fix USB ARM: OMAP: mcbsp: Fix possible memory corruption ...
Diffstat (limited to 'security/tomoyo/realpath.c')
-rw-r--r--security/tomoyo/realpath.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/security/tomoyo/realpath.c b/security/tomoyo/realpath.c
index 738bbdf8d4c7..d9f3ced8756e 100644
--- a/security/tomoyo/realpath.c
+++ b/security/tomoyo/realpath.c
@@ -101,9 +101,8 @@ static char *tomoyo_get_absolute_path(struct path *path, char * const buffer,
{
char *pos = ERR_PTR(-ENOMEM);
if (buflen >= 256) {
- struct path ns_root = { };
/* go to whatever namespace root we are under */
- pos = __d_path(path, &ns_root, buffer, buflen - 1);
+ pos = d_absolute_path(path, buffer, buflen - 1);
if (!IS_ERR(pos) && *pos == '/' && pos[1]) {
struct inode *inode = path->dentry->d_inode;
if (inode && S_ISDIR(inode->i_mode)) {
@@ -294,8 +293,16 @@ char *tomoyo_realpath_from_path(struct path *path)
pos = tomoyo_get_local_path(path->dentry, buf,
buf_len - 1);
/* Get absolute name for the rest. */
- else
+ else {
pos = tomoyo_get_absolute_path(path, buf, buf_len - 1);
+ /*
+ * Fall back to local name if absolute name is not
+ * available.
+ */
+ if (pos == ERR_PTR(-EINVAL))
+ pos = tomoyo_get_local_path(path->dentry, buf,
+ buf_len - 1);
+ }
encode:
if (IS_ERR(pos))
continue;