diff options
author | Eric Paris <eparis@redhat.com> | 2010-07-23 11:43:51 -0400 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2010-08-02 01:35:06 -0400 |
commit | 9cfcac810e8993fa7a5bfd24b1a21f1dbbb03a7b (patch) | |
tree | 86fae80c744e46b15b8eb9aa23fead7e63a64159 /fs/open.c | |
parent | 692a8a231b212dfc68f612956d63f34abf098e0f (diff) |
vfs: re-introduce MAY_CHDIR
Currently MAY_ACCESS means that filesystems must check the permissions
right then and not rely on cached results or the results of future
operations on the object. This can be because of a call to sys_access() or
because of a call to chdir() which needs to check search without relying on
any future operations inside that dir. I plan to use MAY_ACCESS for other
purposes in the security system, so I split the MAY_ACCESS and the
MAY_CHDIR cases.
Signed-off-by: Eric Paris <eparis@redhat.com>
Acked-by: Stephen D. Smalley <sds@tycho.nsa.gov>
Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'fs/open.c')
-rw-r--r-- | fs/open.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -366,7 +366,7 @@ SYSCALL_DEFINE1(chdir, const char __user *, filename) | |||
366 | if (error) | 366 | if (error) |
367 | goto out; | 367 | goto out; |
368 | 368 | ||
369 | error = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_ACCESS); | 369 | error = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_CHDIR); |
370 | if (error) | 370 | if (error) |
371 | goto dput_and_out; | 371 | goto dput_and_out; |
372 | 372 | ||
@@ -395,7 +395,7 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd) | |||
395 | if (!S_ISDIR(inode->i_mode)) | 395 | if (!S_ISDIR(inode->i_mode)) |
396 | goto out_putf; | 396 | goto out_putf; |
397 | 397 | ||
398 | error = inode_permission(inode, MAY_EXEC | MAY_ACCESS); | 398 | error = inode_permission(inode, MAY_EXEC | MAY_CHDIR); |
399 | if (!error) | 399 | if (!error) |
400 | set_fs_pwd(current->fs, &file->f_path); | 400 | set_fs_pwd(current->fs, &file->f_path); |
401 | out_putf: | 401 | out_putf: |
@@ -413,7 +413,7 @@ SYSCALL_DEFINE1(chroot, const char __user *, filename) | |||
413 | if (error) | 413 | if (error) |
414 | goto out; | 414 | goto out; |
415 | 415 | ||
416 | error = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_ACCESS); | 416 | error = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_CHDIR); |
417 | if (error) | 417 | if (error) |
418 | goto dput_and_out; | 418 | goto dput_and_out; |
419 | 419 | ||