From: David Howells <dhowells@redhat.com>
To: torvalds@linux-foundation.org
Cc: dhowells@redhat.com, zohar@linux.vnet.ibm.com,
dmitry.kasatkin@gmail.com, keyrings@linux-nfs.org,
linux-security-module@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: RFC: 'ioctl' for keyrings
Date: Thu, 13 Mar 2014 15:47:26 +0000 [thread overview]
Message-ID: <21625.1394725646@warthog.procyon.org.uk> (raw)
Hi Linus,
I've encountered a situation where I could do with providign certain key types
with their own operations and I'm wondering as to the best way.
The problem I've been trying to deal with is to improve quota management on
keys and introduce LRU key discard when a quota is overrun. This requires me
to overhaul all the ->instantiate() and ->update() key type operations as they
can ask for more quota.
What I want to do is to use the preparsing mechanism I introduced for
asymmetric key handling for both operations. This has the advantage that all
parse errors and invalid arguments can be found upfront before we start
allocating things that are difficult to back out of - and means that we're less
likely to encounter ENOMEM in the type op functions.
Now, ->instantiate() is meant to set the payload on a key and ->update() is
meant to replace the payload on a key. There is, currently, no way to modify a
key to some lesser extent.
However, in the process of doing this, I've come to realise that the trusted
key type and the encrypted key type use their ->update() operations to make a
partial alteration to a key.
Unfortunately, this does not lend itself to preparsing because the result
depends on the key we're going to update - and we don't necessarily know the
key yet.
Further, this behaviour is also broken because ->update() may be called by
add_key() if it finds a matching key; but you cannot rely on add_key() adding
vs updating because it may race with someone else doing an add_key(). To make
matters yet more interesting, at least with encrypted_update(), the parameters
expected in the payload depend on whether you want to create a key or alter a
key.
I can fix this in one of a number of ways:
(1) Provide a generic control operation (analogous with ioctl()) that allows
the user to make some general operation on a key (querying it, altering
it, interacting with hardware).
(2) Provide an alter operation that only allows the key to be altered.
Looking at trusted_update(), though, I have a suspicion that this may not
be sufficient as that also seems to invoke an interaction with the TPM.
(3) Provide separate, specific keyctl functions for the special operations
required by encrypted and trusted keys (and other key types potentially)
that are then validated in the core and routed to the key type.
I would prefer (2) or perhaps (3), I think.
As I understand the code, I think operations being performed from ->update()
are:
(a) Resealing a key with a new pcrs (trusted).
(b) Changing the master key (encrypted).
Mimi, Dmitry: is this list right?
Note that if I do provide some more appropriate vector, I will probably have to
have special code for handling encrypted and trusted keyrings in the core,
rejecting attempts to update in key_create_or_update() and redirecting them in
key_update() in security/keys/key.c
David
next reply other threads:[~2014-03-13 15:47 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-13 15:47 David Howells [this message]
2014-03-13 16:17 ` David Howells
2014-03-13 16:40 ` Mimi Zohar
2014-03-13 16:57 ` Mimi Zohar
2014-03-14 17:14 ` David Howells
2014-03-14 17:53 ` Mimi Zohar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=21625.1394725646@warthog.procyon.org.uk \
--to=dhowells@redhat.com \
--cc=dmitry.kasatkin@gmail.com \
--cc=keyrings@linux-nfs.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=zohar@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®