struct inode *inode = file_inode(bprm->file);
        struct task_smack *bsp = bprm->cred->security;
        struct inode_smack *isp;
+       struct superblock_smack *sbsp;
        int rc;
 
        if (bprm->cred_prepared)
        if (isp->smk_task == NULL || isp->smk_task == bsp->smk_task)
                return 0;
 
+       sbsp = inode->i_sb->s_security;
+       if ((sbsp->smk_flags & SMK_SB_UNTRUSTED) &&
+           isp->smk_task != sbsp->smk_root)
+               return 0;
+
        if (bprm->unsafe & (LSM_UNSAFE_PTRACE | LSM_UNSAFE_PTRACE_CAP)) {
                struct task_struct *tracer;
                rc = 0;
        struct task_smack *tsp;
        struct smack_known *okp;
        struct inode_smack *isp;
+       struct superblock_smack *sbsp;
        int may;
        int mmay;
        int tmay;
        isp = file_inode(file)->i_security;
        if (isp->smk_mmap == NULL)
                return 0;
+       sbsp = file_inode(file)->i_sb->s_security;
+       if (sbsp->smk_flags & SMK_SB_UNTRUSTED &&
+           isp->smk_mmap != sbsp->smk_root)
+               return -EACCES;
        mkp = isp->smk_mmap;
 
        tsp = current_security();
                        if (rc >= 0)
                                transflag = SMK_INODE_TRANSMUTE;
                }
-               if (!(sbsp->smk_flags & SMK_SB_UNTRUSTED)) {
-                       /*
-                        * Don't let the exec or mmap label be "*" or "@".
-                        */
-                       skp = smk_fetch(XATTR_NAME_SMACKEXEC, inode, dp);
-                       if (IS_ERR(skp) || skp == &smack_known_star ||
-                           skp == &smack_known_web)
-                               skp = NULL;
-                       isp->smk_task = skp;
-               }
+               /*
+                * Don't let the exec or mmap label be "*" or "@".
+                */
+               skp = smk_fetch(XATTR_NAME_SMACKEXEC, inode, dp);
+               if (IS_ERR(skp) || skp == &smack_known_star ||
+                   skp == &smack_known_web)
+                       skp = NULL;
+               isp->smk_task = skp;
 
                skp = smk_fetch(XATTR_NAME_SMACKMMAP, inode, dp);
                if (IS_ERR(skp) || skp == &smack_known_star ||