============================ KERNEL KEY RETENTION SERVICE ============================ This service allows cryptographic keys, authentication tokens, cross-domain user mappings, and similar to be cached in the kernel for the use of filesystems and other kernel services. Keyrings are permitted; these are a special type of key that can hold links to other keys. Processes each have three standard keyring subscriptions that a kernel service can search for relevant keys. The key service can be configured on by enabling: "Security options"/"Enable access key retention support" (CONFIG_KEYS) This document has the following sections: - Key overview - Key service overview - Key access permissions - SELinux support - New procfs files - Userspace system call interface - Kernel services - Notes on accessing payload contents - Defining a key type - Request-key callback service - Garbage collection ============ KEY OVERVIEW ============ In this context, keys represent units of cryptographic data, authentication tokens, keyrings, etc.. These are represented in the kernel by struct key. Each key has a number of attributes: - A serial number. - A type. - A description (for matching a key in a search). - Access control information. - An expiry time. - A payload. - State. (*) Each key is issued a serial number of type key_serial_t that is unique for the lifetime of that key. All serial numbers are positive non-zero 32-bit integers. Userspace programs can use a key's serial numbers as a way to gain access to it, subject to permission checking. (*) Each key is of a defined "type". Types must be registered inside the kernel by a kernel service (such as a filesystem) before keys of that type can be added or used. Userspace programs cannot define new types directly. Key types are represented in the kernel by struct key_type. This defines a number of operations that can be performed on a key of that type. Should a type be removed from the system, all the keys of that type will be invalidated. (*) Each key has a description. This should be a printable string. The key type provides an operation to perform a match between the description on a key and a criterion string. (*) Each key has an owner user ID, a group ID and a permissions mask. These are used to control what a process may do to a key from userspace, and whether a kernel service will be able to find the key. (*) Each key can be set to expire at a specific time by the key type's instantiation function. Keys can also be immortal. (*) Each key can have a payload. This is a quantity of data that represent the actual "key". In the case of a keyring, this is a list of keys to which the keyring links; in the case of a user-defined key, it's an arbitrary blob of data. Having a payload is not required; and the payload can, in fact, just be a value stored in the struct key itself. When a key is instantiated, the key type's instantiation function is called with a blob of data, and that then creates the key's payload in some way. Similarly, when userspace wants to read back the contents of the key, if permitted, another key type operation will be called to convert the key's attached payload back into a blob of data. (*) Each key can be in one of a number of basic states: (*) Uninstantiated. The key exists, but does not have any data attached. Keys being requested from userspace will be in this state. (*) Instantiated. This is the normal state. The key is fully formed, and has data attached. (*) Negative. This is a relatively short-lived state. The key acts as a note saying that a previous call out to userspace failed, and acts as a throttle on key lookups. A negative key can be updated to a normal state. (*) Expired. Keys can have lifetimes set. If their lifetime is exceeded, they traverse to this state. An expired key can be updated back to a normal state. (*) Revoked. A key is put in this state by userspace action. It can't be found or operated upon (apart from by unlinking it). (*) Dead. The key's type was unregistered, and so the key is now useless. Keys in the last three states are subject to garbage collection. See the section on "Garbage collection". ==================== KEY SERVICE OVERVIEW ==================== The key service provides a number of features besides keys: (*) The key service defines three special k
##############################################################################
# Copyright (c) 2015 Ericsson AB and others.
# jonas.bjurel@eicsson.com
# ruijing.guo@intel.com
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
YARDSTICK_BRANCH?=55e2e867e9a3f01b39f619251253470948e250d4
YARDSTICK_REPO?=https://gerrit.opnfv.org/gerrit/yardstick.git
YARDSTICK_CHANGE?=