diff options
author | Eric Paris <eparis@redhat.com> | 2008-04-09 14:08:35 -0400 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2008-04-09 18:51:01 -0400 |
commit | 5a55261716e838f188598ab3d7a0abf9cf1338f8 (patch) | |
tree | 2acf7f919cb2edd77a4f9ed0a434b6dbec19708e | |
parent | 7180c4c9e09888db0a188f729c96c6d7bd61fa83 (diff) |
SELinux: don't BUG if fs reuses a superblock
I (wrongly) assumed that nfs_xdev_get_sb() would not ever share a superblock
and so cloning mount options would always be correct. Turns out that isn't
the case and we could fall over a BUG_ON() that wasn't a BUG at all. Since
there is little we can do to reconcile different mount options this patch
just leaves the sb alone and the first set of options wins.
Signed-off-by: Eric Paris <eparis@redhat.com>
Acked-by: Stephen Smalley <sds@tycho.nsa.gov>
Acked-by: Trond Myklebust <trond.myklebust@fys.uio.no>
Signed-off-by: James Morris <jmorris@namei.org>
-rw-r--r-- | security/selinux/hooks.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 89bb6d36c0a7..d39b59cf8a08 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
@@ -760,13 +760,13 @@ static void selinux_sb_clone_mnt_opts(const struct super_block *oldsb, | |||
760 | * this early in the boot process. */ | 760 | * this early in the boot process. */ |
761 | BUG_ON(!ss_initialized); | 761 | BUG_ON(!ss_initialized); |
762 | 762 | ||
763 | /* this might go away sometime down the line if there is a new user | ||
764 | * of clone, but for now, nfs better not get here... */ | ||
765 | BUG_ON(newsbsec->initialized); | ||
766 | |||
767 | /* how can we clone if the old one wasn't set up?? */ | 763 | /* how can we clone if the old one wasn't set up?? */ |
768 | BUG_ON(!oldsbsec->initialized); | 764 | BUG_ON(!oldsbsec->initialized); |
769 | 765 | ||
766 | /* if fs is reusing a sb, just let its options stand... */ | ||
767 | if (newsbsec->initialized) | ||
768 | return; | ||
769 | |||
770 | mutex_lock(&newsbsec->lock); | 770 | mutex_lock(&newsbsec->lock); |
771 | 771 | ||
772 | newsbsec->flags = oldsbsec->flags; | 772 | newsbsec->flags = oldsbsec->flags; |