From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Serge E. Hallyn" Subject: Re: [PATCH] capabilities: Ambient capability set V1 Date: Thu, 26 Feb 2015 14:55:12 -0600 Message-ID: <20150226205512.GA19273@mail.hallyn.com> References: <20150224164429.GB29685@ubuntumail> <20150225033247.GC29685@ubuntumail> <20150226153524.GC15182@mail.hallyn.com> <20150226193200.GA17709@mail.hallyn.com> <20150226203405.GB18926@mail.hallyn.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: Sender: linux-security-module-owner@vger.kernel.org To: Andy Lutomirski Cc: "Serge E. Hallyn" , Christoph Lameter , Serge Hallyn , Serge Hallyn , Aaron Jones , Ted Ts'o , LSM List , Andrew Morton , "Andrew G. Morgan" , Mimi Zohar , Austin S Hemmelgarn , Markku Savela , Jarkko Sakkinen , "linux-kernel@vger.kernel.org" , Linux API , Michael Kerrisk , Jonathan Corbet List-Id: linux-api@vger.kernel.org On Thu, Feb 26, 2015 at 12:51:57PM -0800, Andy Lutomirski wrote: > On Thu, Feb 26, 2015 at 12:34 PM, Serge E. Hallyn wrote: > > On Thu, Feb 26, 2015 at 02:13:00PM -0600, Christoph Lameter wrote: > >> On Thu, 26 Feb 2015, Serge E. Hallyn wrote: > >> > >> > Andrew Morgan was against that. What if we changed > >> > > >> > pE' = pP' & (fE | pA) > >> > > >> > to > >> > > >> > if (pA) > >> > pE' = pP' & fE > >> > else > >> > pE' = pP' > >> > > >> > >> Same problem as before. The ambient bits will not be set in pE'. > > > > And what if I weren't scatterbrained and we did > > > > if (pA) > > pE' = pP' > > else > > pE' = pP' & fE > > > > All pP' bits would be set in pE'. > > That seems reasonable to me, except for my paranoia: > > What if there's a program with CAP_DAC_OVERRIDE in fP and fE set to > the empty set (i.e. the magic effective bit cleared), and the program > relies on that. A malicious user has CAP_NET_BIND and sets pA = > CAP_NET_BIND. Boom! > > If we changed that to if (pA') and zeroed pA if fP is non-empty then > this problem goes away. Hm, the problem is that then the empty pA is inherited by children. I do see that any program with fP set should probably run with only what it requested. Would if (pA && is_empty(fP)) pE' = pP' else pE' = pP' & fE help? Or are you worried about a program with fP set which then executes other programs?