SELinux: don't BUG if fs reuses a superblock
authorEric Paris <eparis@redhat.com>
Wed, 9 Apr 2008 18:08:35 +0000 (14:08 -0400)
committerJames Morris <jmorris@namei.org>
Wed, 9 Apr 2008 22:51:01 +0000 (08:51 +1000)
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>
security/selinux/hooks.c

index 89bb6d36c0a7f69aec9d8e0e373fe68a3c820514..d39b59cf8a08c12f69ff257553a2f3bebd18a685 100644 (file)
@@ -760,13 +760,13 @@ static void selinux_sb_clone_mnt_opts(const struct super_block *oldsb,
         * this early in the boot process. */
        BUG_ON(!ss_initialized);
 
-       /* this might go away sometime down the line if there is a new user
-        * of clone, but for now, nfs better not get here... */
-       BUG_ON(newsbsec->initialized);
-
        /* how can we clone if the old one wasn't set up?? */
        BUG_ON(!oldsbsec->initialized);
 
+       /* if fs is reusing a sb, just let its options stand... */
+       if (newsbsec->initialized)
+               return;
+
        mutex_lock(&newsbsec->lock);
 
        newsbsec->flags = oldsbsec->flags;