From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751812AbbJFM0w (ORCPT ); Tue, 6 Oct 2015 08:26:52 -0400 Received: from mga14.intel.com ([192.55.52.115]:19413 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750998AbbJFM0u (ORCPT ); Tue, 6 Oct 2015 08:26:50 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,643,1437462000"; d="scan'208";a="820456191" Date: Tue, 6 Oct 2015 15:26:44 +0300 From: Jarkko Sakkinen To: "Fuchs, Andreas" Cc: "tpmdd-devel@lists.sourceforge.net" , "linux-kernel@vger.kernel.org" , David Howells , "gregkh@linuxfoundation.org" , "open list:KEYS-TRUSTED" , "open list:KEYS-TRUSTED" , James Morris , David Safford , "akpm@linux-foundation.org" , "Serge E. Hallyn" , "josh@joshtripplet.org" , "richard.l.maliszewski@intel.com" , "monty.wiseman@intel.com" , "will.c.arthur@intel.com" Subject: Re: [tpmdd-devel] [PATCH 4/4] keys, trusted: seal/unseal with TPM 2.0 chips Message-ID: <20151006122644.GA22991@intel.com> References: <20151005083753.GA27404@intel.com> <9F48E1A823B03B4790B7E6E69430724D9D7AE966@EXCH2010A.sit.fraunhofer.de> <20151005115649.GA32138@intel.com> <9F48E1A823B03B4790B7E6E69430724D9D7AEAB1@EXCH2010A.sit.fraunhofer.de> <20151005131733.GA4459@intel.com> <9F48E1A823B03B4790B7E6E69430724D9D7AEBD5@EXCH2010A.sit.fraunhofer.de> <20151005135703.GA6196@intel.com> <9F48E1A823B03B4790B7E6E69430724D9D7AEC1D@EXCH2010A.sit.fraunhofer.de> <20151005142800.GA7205@intel.com> <9F48E1A823B03B4790B7E6E69430724D9D7AF14E@EXCH2010A.sit.fraunhofer.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <9F48E1A823B03B4790B7E6E69430724D9D7AF14E@EXCH2010A.sit.fraunhofer.de> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Oct 06, 2015 at 06:22:29AM +0000, Fuchs, Andreas wrote: > > > OK, I guess we got stuck in the follow-up discussions and missed the points. > > > > Yup, don't get me wrong here. I like this discussion and am willing to > > listen to reasonable arguments. > > We could not agree more. I'm always up for a good discussion... ;-) > > > > My 1st point is: > > > > > > TPM1.2's 0x40000000 SRK handle was a well-known, singleton, always-present > > > key, that could be relied upon. > > > > > > TPM2.0's 0x80000000 is a temporary, TPM-assigned, context-specific handle, > > > that cannot be relied upon. > > > > > > Therefore, I think your patch should not use it. > > > > > > Instead, I'd recommend using the closest equivalent to an SRK that TPM2.0 > > > has to offer, which is within the range 0x81000000 to 0x8100FFFF. > > > (see http://www.trustedcomputinggroup.org/resources/registry_of_reserved_tpm_20_handles_and_localities) > > > You might want to use TPM2_GetCapability() to find the correct one. > > > > > > Also User-Space could reference any of these handles in the > > > 0x81000000-0x81FFFFFF range. This would be fine. > > > > Alright. How about requiring keyhandle as explicit option for TPM 2.0? > > Would that be a more reasonable solution in your opinion? That would > > acceptable for me. > > You mean getting rid of the default behaviour ? > That sound reasonable to me as well. A later patch could add the possibility > to use the TPM2_GetCapability() thing at a later stage then... > > > > My 2nd point is: > > > > > > It is IMHO a bad idea to allow user-space to provide transient handles as > > > parameter to the TPM, because TSS2.0 will virtualize handles and /dev/tpm0 > > > is single-access only. > > > Instead I'd recommend passing context-saved-blobs to the kernel. > > > > > > Then you brought up the valid point that this requires kernel-space resource > > > broker and I provided some sketch-idea in pseudo-code for discussion of > > > general approach. I did not know that the access broker was solved already. > > > > Yeah. I'm not against implementing the broker and how I've been thinking > > implementing it is not too far away what you just suggested. > > > > I'm not just seeing why that couldn't be done as a separate patch set > > later on. > > I should have been more clear then. I agree that it can be added later on. > Or rather I think it should be added at some later point... > > I was just trying to point out that the concept is not too difficult, since > kernel-space (minimal) resource-manager makes a lot of people go "oh god, > never ever, way too big, way too complicated", which IMHO it is not. > Until then, I think that the call should just return -EBUSY when you cannot > load the sealed data if no slots are available ? Well this is kind of argument where there is no argument. I already had plans how to do access broker back in 2014 that are more or less along the lines of the pseudo code you sent. The problem is the lack of active maintainers in the subsystem. That's why I get easily frustated discussing about access broker in the first place :) I would have implemented access broker months and months ago if I didn't have so much code in the queue for this subsystem. There can be literally months delay without any feedback. Right now I have four different patches or patch sets in the queue: - PPI support (yes you cannot enable TPM chips at the moment from Linux) - Two bug fixes (CRB command buffer alignment, dTPM2 ACPI hot plugging) - Basic trusted keys I wouldn't blame any particular person about the situation but things cannot continue like this. I've been thinking if I could acquire co-maintainership of the subsystem for TPM 2 parts (don't really have time or expertise for TPM 1.x parts). I could post my architecture (never really written it except in my head but should not take too long time) to my blog at jsakkine.blogspot.com if you are interested discussing more. > I looked at Patch 3/4 and it seems you default to -EPERM on TPM2_Create()- > and TPM2_Load()-failures ? > You might want to test against rc == TPM_RC_OBJECT_MEMORY and return -EBUSY > in those cases. Would you agree ? > (P.S. I can cross-post there if that's prefered ?) Have to check the return values. I posted this patch set already in early July. You are the first reviewer in three months for this patch set. I think the reason was that for TPM 1.x returned -EPERM in all error scenarios and I didn't want to endanger behaviour of command-line tools such as 'keyctl'. I would keep it that way unless you can guarantee that command-line tools will continue work correctly if I change it to -EBUSY. Anyway, I will recheck this part of the patch set but likely are not going to do any changes because I don't want to break the user space. I will consider revising the patch set with keyhandle required as an explicit option. > Cheers, > Andreas /Jarkko