From patchwork Fri Feb 16 20:33:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taras Kondratiuk X-Patchwork-Id: 10225635 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C31D760231 for ; Fri, 16 Feb 2018 20:35:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B50BE29675 for ; Fri, 16 Feb 2018 20:35:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A977729685; Fri, 16 Feb 2018 20:35:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_HI,USER_IN_DEF_DKIM_WL autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4175729677 for ; Fri, 16 Feb 2018 20:35:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750973AbeBPUfl (ORCPT ); Fri, 16 Feb 2018 15:35:41 -0500 Received: from alln-iport-6.cisco.com ([173.37.142.93]:35249 "EHLO alln-iport-6.cisco.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751091AbeBPUeL (ORCPT ); Fri, 16 Feb 2018 15:34:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=2865; q=dns/txt; s=iport; t=1518813251; x=1520022851; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=h+x182m25pAUhcejAUrzU53jlgUVrI0n67CYLEcHg4c=; b=cOLZsB9Nzw8q1/StuKYf0pbeaeCA2urCwUkBI0bmQwiqz/hi1LCQuP// 1S8uT9eWWL7JxhxiFsW1vABwSEOU7gefPIGE9KZzNROAxNTHY0pxBlQ16 jgxD0Ib718nbLqSjENqeNyQ7odDOfXJEl7q7ZMUdCKHpJXGbr8NxwBOGy k=; X-IronPort-AV: E=Sophos;i="5.46,520,1511827200"; d="scan'208";a="71375540" Received: from rcdn-core-6.cisco.com ([173.37.93.157]) by alln-iport-6.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Feb 2018 20:34:09 +0000 Received: from sjc-ads-7132.cisco.com (sjc-ads-7132.cisco.com [10.30.217.207]) (authenticated bits=0) by rcdn-core-6.cisco.com (8.14.5/8.14.5) with ESMTP id w1GKXsMg015412 (version=TLSv1/SSLv3 cipher=AES128-SHA256 bits=128 verify=NO); Fri, 16 Feb 2018 20:34:08 GMT From: Taras Kondratiuk To: "H. Peter Anvin" , Al Viro , Arnd Bergmann , Rob Landley , Mimi Zohar , Jonathan Corbet , James McMechan Cc: initramfs@vger.kernel.org, Victor Kamensky , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-security-module@vger.kernel.org, xe-linux-external@cisco.com Subject: [PATCH v3 14/14] selinux: delay sid population for rootfs till init is complete Date: Fri, 16 Feb 2018 20:33:53 +0000 Message-Id: <1518813234-5874-18-git-send-email-takondra@cisco.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1518813234-5874-1-git-send-email-takondra@cisco.com> References: <1518813234-5874-1-git-send-email-takondra@cisco.com> X-Auto-Response-Suppress: DR, OOF, AutoReply X-Authenticated-User: takondra@cisco.com Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP From: Victor Kamensky With initramfs cpio format that supports extended attributes we need to skip sid population on sys_lsetxattr call from initramfs for rootfs if security server is not initialized yet. Otherwise callback in selinux_inode_post_setxattr will try to translate give security.selinux label into sid context and since security server is not available yet inode will receive default sid (typically kernel_t). Note that in the same time proper label will be stored in inode xattrs. Later, since inode sid would be already populated system will never look back at actual xattrs. But if we skip sid population for rootfs and we have policy that direct use of xattrs for rootfs, proper sid will be filled in from extended attributes one node is accessed and server is initialized. Note new DELAYAFTERINIT_MNT super block flag is introduced to only mark rootfs for such behavior. For other types of tmpfs original logic is still used. Signed-off-by: Victor Kamensky --- security/selinux/hooks.c | 9 ++++++++- security/selinux/include/security.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index f3fe65589f02..bb25268f734e 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -716,7 +716,7 @@ static int selinux_set_mnt_opts(struct super_block *sb, */ if (!strncmp(sb->s_type->name, "rootfs", sizeof("rootfs"))) - sbsec->flags |= SBLABEL_MNT; + sbsec->flags |= SBLABEL_MNT|DELAYAFTERINIT_MNT; /* Defer initialization until selinux_complete_init, after the initial policy is loaded and the security @@ -3253,6 +3253,7 @@ static void selinux_inode_post_setxattr(struct dentry *dentry, const char *name, { struct inode *inode = d_backing_inode(dentry); struct inode_security_struct *isec; + struct superblock_security_struct *sbsec; u32 newsid; int rc; @@ -3261,6 +3262,12 @@ static void selinux_inode_post_setxattr(struct dentry *dentry, const char *name, return; } + if (!ss_initialized) { + sbsec = inode->i_sb->s_security; + if (sbsec->flags & DELAYAFTERINIT_MNT) + return; + } + rc = security_context_to_sid_force(value, size, &newsid); if (rc) { printk(KERN_ERR "SELinux: unable to map context to SID" diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h index 02f0412d42f2..585acfd6cbcf 100644 --- a/security/selinux/include/security.h +++ b/security/selinux/include/security.h @@ -52,6 +52,7 @@ #define ROOTCONTEXT_MNT 0x04 #define DEFCONTEXT_MNT 0x08 #define SBLABEL_MNT 0x10 +#define DELAYAFTERINIT_MNT 0x20 /* Non-mount related flags */ #define SE_SBINITIALIZED 0x0100 #define SE_SBPROC 0x0200