Commit 1418a3e5ad4d01b1d4abf2c479c50b0cedd59e3f

Authored by Tetsuo Handa
Committed by Linus Torvalds
1 parent 34a9d2c39a

TOMOYO: Fix pathname handling of disconnected paths.

Current tomoyo_realpath_from_path() implementation returns strange pathname
when calculating pathname of a file which belongs to lazy unmounted tree.
Use local pathname rather than strange absolute pathname in that case.

Also, this patch fixes a regression by commit 02125a82 "fix apparmor
dereferencing potentially freed dentry, sanitize __d_path() API".

Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Acked-by: Al Viro <viro@zeniv.linux.org.uk>
Cc: stable@vger.kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 9 additions and 1 deletions Side-by-side Diff

security/tomoyo/realpath.c
... ... @@ -293,8 +293,16 @@
293 293 pos = tomoyo_get_local_path(path->dentry, buf,
294 294 buf_len - 1);
295 295 /* Get absolute name for the rest. */
296   - else
  296 + else {
297 297 pos = tomoyo_get_absolute_path(path, buf, buf_len - 1);
  298 + /*
  299 + * Fall back to local name if absolute name is not
  300 + * available.
  301 + */
  302 + if (pos == ERR_PTR(-EINVAL))
  303 + pos = tomoyo_get_local_path(path->dentry, buf,
  304 + buf_len - 1);
  305 + }
298 306 encode:
299 307 if (IS_ERR(pos))
300 308 continue;