diff options
author | Eric Paris <eparis@parisplace.org> | 2006-07-14 03:24:33 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-07-15 00:53:55 -0400 |
commit | b04ea3cebf79d6808632808072f276dbc98aaf01 (patch) | |
tree | 7620a01477510d9e4ae042baab17bce103b59185 /security/selinux/hooks.c | |
parent | 517e7aa5b022f9dc486639c7689666663daee24f (diff) |
[PATCH] Fix security check for joint context= and fscontext= mount options
After some discussion on the actual meaning of the filesystem class
security check in try context mount it was determined that the checks for
the context= mount options were not correct if fscontext mount option had
already been used.
When labeling the superblock we should be checking relabel_from and
relabel_to. But if the superblock has already been labeled (with
fscontext) then context= is actually labeling the inodes, and so we should
be checking relabel_from and associate. This patch fixes which checks are
called depending on the mount options.
Signed-off-by: Eric Paris <eparis@redhat.com>
Acked-by: Stephen Smalley <sds@tycho.nsa.gov>
Acked-by: James Morris <jmorris@namei.org>
Cc: Chris Wright <chrisw@sous-sol.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'security/selinux/hooks.c')
-rw-r--r-- | security/selinux/hooks.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 2e8b4dfcbc74..a91c961ba38b 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
@@ -523,12 +523,16 @@ static int try_context_mount(struct super_block *sb, void *data) | |||
523 | goto out_free; | 523 | goto out_free; |
524 | } | 524 | } |
525 | 525 | ||
526 | rc = may_context_mount_sb_relabel(sid, sbsec, tsec); | 526 | if (!fscontext) { |
527 | if (rc) | 527 | rc = may_context_mount_sb_relabel(sid, sbsec, tsec); |
528 | goto out_free; | 528 | if (rc) |
529 | 529 | goto out_free; | |
530 | if (!fscontext) | ||
531 | sbsec->sid = sid; | 530 | sbsec->sid = sid; |
531 | } else { | ||
532 | rc = may_context_mount_inode_relabel(sid, sbsec, tsec); | ||
533 | if (rc) | ||
534 | goto out_free; | ||
535 | } | ||
532 | sbsec->mntpoint_sid = sid; | 536 | sbsec->mntpoint_sid = sid; |
533 | 537 | ||
534 | sbsec->behavior = SECURITY_FS_USE_MNTPOINT; | 538 | sbsec->behavior = SECURITY_FS_USE_MNTPOINT; |