Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp1156010imm; Fri, 11 May 2018 11:55:37 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqoS9OQ8X1l+pCc0n5SAhALo+FYQ/jISeKkNsvO/2VDXMZ8ej+nS+hvJFgLzNTsOEDGEb0g X-Received: by 2002:a63:5fd2:: with SMTP id t201-v6mr163550pgb.315.1526064937595; Fri, 11 May 2018 11:55:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526064937; cv=none; d=google.com; s=arc-20160816; b=QjKU4heg1T+47ZOOenTsxkFc5ASSjQ7Amzgxv0wYwGLiJgEOA1wzIft1ik6oivOREL ZAAZHfbBVZKnIXe4qkFD1EopfUg4PXgXAEVCRgNESrKtk718ReU+GBHecRWiArbMULhP y2c6h+3XfXWwPT3jCbhr87Jsl3DL+B6LdRtJZKFqO/RfRSqfFR9tU6CdPN0V9xwW1fYq M4MZDz80X4Rs5EQ5JuavykGFGb2mVDRPjGmBr4dcoHXk3KgPnzGqdYqIfVVSzgt/J7hV q3agLzahg93HRzU9CE09E0bT/7DbbcyFLjBPE+cF5OC23hQms0ii+1HzU80ZQT85M9F0 Nd6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=2efnxt77BmhcJMGHU4y13/Y2Dhbk0BlhqJ72134UbSM=; b=jV6akpauXWAJkKrtXrl5hM43kEExdjN7ksQGin/NaSm8RkmdJLE4y1k/dpWyNDeP/u UvYU4JKInC0vmBW0vKV+6p0GOSfV3dQeg33ad2dLQn4QWRo4AWwcwz45UHnljYCiXqcV BnNgur7n4/gCqtvR97vviVoKA2lLV9UJHpMz4atmG2JQHDKiNzQVEjCCEpkfkZcz6ZAY yFQJm3hW10boUNNftWfeY85w7aGHAriEKiuJ6grpxUf81pBG4UdIXBR5hvd7Fxi+YG/T dr9FwEU4NQm4d0h8E22t2p9iXV7XAgV/S+XyQPDGzNE3I4VLa5YZ5lfdTscZ3pvSk5WF wa+g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x64-v6si3906064pff.196.2018.05.11.11.55.21; Fri, 11 May 2018 11:55:37 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751955AbeEKSye (ORCPT + 99 others); Fri, 11 May 2018 14:54:34 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:40632 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751400AbeEKSyc (ORCPT ); Fri, 11 May 2018 14:54:32 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7F6E640006ED; Fri, 11 May 2018 18:54:31 +0000 (UTC) Received: from horse.redhat.com (unknown [10.18.25.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id 402A4215CDA7; Fri, 11 May 2018 18:54:31 +0000 (UTC) Received: by horse.redhat.com (Postfix, from userid 10451) id EEB13220322; Fri, 11 May 2018 14:54:30 -0400 (EDT) Date: Fri, 11 May 2018 14:54:30 -0400 From: Vivek Goyal To: Miklos Szeredi Cc: linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Al Viro , linux-security-module@vger.kernel.org, Daniel J Walsh , Paul Moore , Stephen Smalley Subject: Re: [PATCH v2 22/35] vfs: don't open real Message-ID: <20180511185430.GE6044@redhat.com> References: <20180507083807.28792-1-mszeredi@redhat.com> <20180507083807.28792-23-mszeredi@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180507083807.28792-23-mszeredi@redhat.com> User-Agent: Mutt/1.9.1 (2017-09-22) X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Fri, 11 May 2018 18:54:31 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Fri, 11 May 2018 18:54:31 +0000 (UTC) for IP:'10.11.54.6' DOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'vgoyal@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, May 07, 2018 at 10:37:54AM +0200, Miklos Szeredi wrote: > Let overlayfs do its thing when opening a file. > > This enables stacking and fixes the corner case when a file is opened for > read, modified through a writable open, and data is read from the read-only > file. After this patch the read-only open will not return stale data even > in this case. [CC Dan, Steven, Paul, linux-security-module list] Hi Miklos, I was running selinux-testsuite and one of the tests seems to fail. I think this is side effect of installing overlay inode in file->f_inode instead of real underlying inode. Following test is failing. sub test_90_1 { print "Attempting to enter domain with bad entrypoint, should fail.\n"; $result = system( "runcon -t test_overlay_client_t -l s0:c10,c20 $basedir/container1/merged/badentrypoint >/dev/null 2>&1" ); ok($result); return; } Basically, this test has an executable named "badentrypoint" with selinux label "unconfined_u:object_r:test_overlay_files_ro_t:s0". And we mount overlay with context=unconfined_u:object_r:test_overlay_files_rwx_t:s0:c10,c20 So effectively overlay inode of "badentrypoint" now gets the label specified by "context=". I think intent of test is that this file's real label is "...ro_t". That means this file is not supposed to be executed and any attempt to execute it should be denied. Currently test works and execution fails with following avc. AVC avc: denied { entrypoint } for pid=1425 comm="runcon" path="/root/git/selinux-testsuite/tests/overlay/container1/merged/badentrypoint" dev="dm-0" ino=34515261 scontext=unconfined_u:unconfined_r:test_overlay_client_t:s0:c10,c20 tcontext=unconfined_u:object_r:test_overlay_files_ro_t:s0 tclass=file permissive=0 But with new patches, this test starts passing. I think currently selinux_bprm_set_creds() returns error. It does checks on inode returned by file_inode() and as of now that inode is real inode and that inode has real lable of "...ro_t" and permission to execute that file is denied. But after the patches file_inode() returns overlay inode. Which has the label specified by context= mount option "...rwx_t". And that label allows executing file, so file execution is not blocked by selinux. I feel that even now code is working accidently. Ideally our theme was that task's credential as checked against overlay inode and mounter's creds are checked against underlying inode to determine if certain permission is allowed. So ideally mounter should not have been allwed to execute a file of type "...ro_t". But we don't have that workflow and VFS calls into selinux and selinux checks the underlying file's label against task. It worked so far but the moment we install overlay inode in file, selinux checks it against overlay inode label and allows permission to execute and mounter is never checked against real inode. I am not sure what's the right solution. So far selinux is not aware of two levels of checks and if two levels of checks are to be performed, it somehow needs to be enforced by overlay and call same hook on two levels. Thought of atleast starting a conversation on this. Thanks Vivek > > Signed-off-by: Miklos Szeredi > --- > fs/open.c | 7 +------ > 1 file changed, 1 insertion(+), 6 deletions(-) > > diff --git a/fs/open.c b/fs/open.c > index 6e52fd6fea7c..244cd2ecfefd 100644 > --- a/fs/open.c > +++ b/fs/open.c > @@ -897,13 +897,8 @@ EXPORT_SYMBOL(file_path); > int vfs_open(const struct path *path, struct file *file, > const struct cred *cred) > { > - struct dentry *dentry = d_real(path->dentry, NULL, file->f_flags, 0); > - > - if (IS_ERR(dentry)) > - return PTR_ERR(dentry); > - > file->f_path = *path; > - return do_dentry_open(file, d_backing_inode(dentry), NULL, cred); > + return do_dentry_open(file, d_backing_inode(path->dentry), NULL, cred); > } > > /** > -- > 2.14.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-unionfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html