KEYS: Remove KEY_FLAG_TRUSTED and KEY_ALLOC_TRUSTED
Remove KEY_FLAG_TRUSTED and KEY_ALLOC_TRUSTED as they're no longer meaningful. Also we can drop the trusted flag from the preparse structure. Given this, we no longer need to pass the key flags through to restrict_link(). Further, we can now get rid of keyring_restrict_trusted_only() also. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
Родитель
a511e1af8b
Коммит
77f68bac94
|
@ -31,7 +31,6 @@ extern __initconst const unsigned long system_certificate_list_size;
|
||||||
*/
|
*/
|
||||||
int restrict_link_by_builtin_trusted(struct key *keyring,
|
int restrict_link_by_builtin_trusted(struct key *keyring,
|
||||||
const struct key_type *type,
|
const struct key_type *type,
|
||||||
unsigned long flags,
|
|
||||||
const union key_payload *payload)
|
const union key_payload *payload)
|
||||||
{
|
{
|
||||||
return restrict_link_by_signature(system_trusted_keyring,
|
return restrict_link_by_signature(system_trusted_keyring,
|
||||||
|
@ -97,7 +96,6 @@ static __init int load_system_certificate_list(void)
|
||||||
((KEY_POS_ALL & ~KEY_POS_SETATTR) |
|
((KEY_POS_ALL & ~KEY_POS_SETATTR) |
|
||||||
KEY_USR_VIEW | KEY_USR_READ),
|
KEY_USR_VIEW | KEY_USR_READ),
|
||||||
KEY_ALLOC_NOT_IN_QUOTA |
|
KEY_ALLOC_NOT_IN_QUOTA |
|
||||||
KEY_ALLOC_TRUSTED |
|
|
||||||
KEY_ALLOC_BUILT_IN |
|
KEY_ALLOC_BUILT_IN |
|
||||||
KEY_ALLOC_BYPASS_RESTRICTION);
|
KEY_ALLOC_BYPASS_RESTRICTION);
|
||||||
if (IS_ERR(key)) {
|
if (IS_ERR(key)) {
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
|
|
||||||
extern int restrict_link_by_builtin_trusted(struct key *keyring,
|
extern int restrict_link_by_builtin_trusted(struct key *keyring,
|
||||||
const struct key_type *type,
|
const struct key_type *type,
|
||||||
unsigned long flags,
|
|
||||||
const union key_payload *payload);
|
const union key_payload *payload);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -45,7 +45,6 @@ struct key_preparsed_payload {
|
||||||
size_t datalen; /* Raw datalen */
|
size_t datalen; /* Raw datalen */
|
||||||
size_t quotalen; /* Quota length for proposed payload */
|
size_t quotalen; /* Quota length for proposed payload */
|
||||||
time_t expiry; /* Expiry time of key */
|
time_t expiry; /* Expiry time of key */
|
||||||
bool trusted; /* True if key is trusted */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef int (*request_key_actor_t)(struct key_construction *key,
|
typedef int (*request_key_actor_t)(struct key_construction *key,
|
||||||
|
|
|
@ -173,10 +173,9 @@ struct key {
|
||||||
#define KEY_FLAG_NEGATIVE 5 /* set if key is negative */
|
#define KEY_FLAG_NEGATIVE 5 /* set if key is negative */
|
||||||
#define KEY_FLAG_ROOT_CAN_CLEAR 6 /* set if key can be cleared by root without permission */
|
#define KEY_FLAG_ROOT_CAN_CLEAR 6 /* set if key can be cleared by root without permission */
|
||||||
#define KEY_FLAG_INVALIDATED 7 /* set if key has been invalidated */
|
#define KEY_FLAG_INVALIDATED 7 /* set if key has been invalidated */
|
||||||
#define KEY_FLAG_TRUSTED 8 /* set if key is trusted */
|
#define KEY_FLAG_BUILTIN 8 /* set if key is built in to the kernel */
|
||||||
#define KEY_FLAG_BUILTIN 9 /* set if key is built in to the kernel */
|
#define KEY_FLAG_ROOT_CAN_INVAL 9 /* set if key can be invalidated by root without permission */
|
||||||
#define KEY_FLAG_ROOT_CAN_INVAL 10 /* set if key can be invalidated by root without permission */
|
#define KEY_FLAG_KEEP 10 /* set if key should not be removed */
|
||||||
#define KEY_FLAG_KEEP 11 /* set if key should not be removed */
|
|
||||||
|
|
||||||
/* the key type and key description string
|
/* the key type and key description string
|
||||||
* - the desc is used to match a key against search criteria
|
* - the desc is used to match a key against search criteria
|
||||||
|
@ -217,7 +216,6 @@ struct key {
|
||||||
*/
|
*/
|
||||||
int (*restrict_link)(struct key *keyring,
|
int (*restrict_link)(struct key *keyring,
|
||||||
const struct key_type *type,
|
const struct key_type *type,
|
||||||
unsigned long flags,
|
|
||||||
const union key_payload *payload);
|
const union key_payload *payload);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -229,16 +227,14 @@ extern struct key *key_alloc(struct key_type *type,
|
||||||
unsigned long flags,
|
unsigned long flags,
|
||||||
int (*restrict_link)(struct key *,
|
int (*restrict_link)(struct key *,
|
||||||
const struct key_type *,
|
const struct key_type *,
|
||||||
unsigned long,
|
|
||||||
const union key_payload *));
|
const union key_payload *));
|
||||||
|
|
||||||
|
|
||||||
#define KEY_ALLOC_IN_QUOTA 0x0000 /* add to quota, reject if would overrun */
|
#define KEY_ALLOC_IN_QUOTA 0x0000 /* add to quota, reject if would overrun */
|
||||||
#define KEY_ALLOC_QUOTA_OVERRUN 0x0001 /* add to quota, permit even if overrun */
|
#define KEY_ALLOC_QUOTA_OVERRUN 0x0001 /* add to quota, permit even if overrun */
|
||||||
#define KEY_ALLOC_NOT_IN_QUOTA 0x0002 /* not in quota */
|
#define KEY_ALLOC_NOT_IN_QUOTA 0x0002 /* not in quota */
|
||||||
#define KEY_ALLOC_TRUSTED 0x0004 /* Key should be flagged as trusted */
|
#define KEY_ALLOC_BUILT_IN 0x0004 /* Key is built into kernel */
|
||||||
#define KEY_ALLOC_BUILT_IN 0x0008 /* Key is built into kernel */
|
#define KEY_ALLOC_BYPASS_RESTRICTION 0x0008 /* Override the check on restricted keyrings */
|
||||||
#define KEY_ALLOC_BYPASS_RESTRICTION 0x0010 /* Override the check on restricted keyrings */
|
|
||||||
|
|
||||||
extern void key_revoke(struct key *key);
|
extern void key_revoke(struct key *key);
|
||||||
extern void key_invalidate(struct key *key);
|
extern void key_invalidate(struct key *key);
|
||||||
|
@ -309,18 +305,11 @@ extern struct key *keyring_alloc(const char *description, kuid_t uid, kgid_t gid
|
||||||
unsigned long flags,
|
unsigned long flags,
|
||||||
int (*restrict_link)(struct key *,
|
int (*restrict_link)(struct key *,
|
||||||
const struct key_type *,
|
const struct key_type *,
|
||||||
unsigned long,
|
|
||||||
const union key_payload *),
|
const union key_payload *),
|
||||||
struct key *dest);
|
struct key *dest);
|
||||||
|
|
||||||
extern int keyring_restrict_trusted_only(struct key *keyring,
|
|
||||||
const struct key_type *type,
|
|
||||||
unsigned long,
|
|
||||||
const union key_payload *payload);
|
|
||||||
|
|
||||||
extern int restrict_link_reject(struct key *keyring,
|
extern int restrict_link_reject(struct key *keyring,
|
||||||
const struct key_type *type,
|
const struct key_type *type,
|
||||||
unsigned long flags,
|
|
||||||
const union key_payload *payload);
|
const union key_payload *payload);
|
||||||
|
|
||||||
extern int keyring_clear(struct key *keyring);
|
extern int keyring_clear(struct key *keyring);
|
||||||
|
|
|
@ -51,12 +51,11 @@ static bool init_keyring __initdata;
|
||||||
*/
|
*/
|
||||||
static int restrict_link_by_ima_mok(struct key *keyring,
|
static int restrict_link_by_ima_mok(struct key *keyring,
|
||||||
const struct key_type *type,
|
const struct key_type *type,
|
||||||
unsigned long flags,
|
|
||||||
const union key_payload *payload)
|
const union key_payload *payload)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = restrict_link_by_builtin_trusted(keyring, type, flags, payload);
|
ret = restrict_link_by_builtin_trusted(keyring, type, payload);
|
||||||
if (ret != -ENOKEY)
|
if (ret != -ENOKEY)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -227,7 +227,6 @@ struct key *key_alloc(struct key_type *type, const char *desc,
|
||||||
key_perm_t perm, unsigned long flags,
|
key_perm_t perm, unsigned long flags,
|
||||||
int (*restrict_link)(struct key *,
|
int (*restrict_link)(struct key *,
|
||||||
const struct key_type *,
|
const struct key_type *,
|
||||||
unsigned long,
|
|
||||||
const union key_payload *))
|
const union key_payload *))
|
||||||
{
|
{
|
||||||
struct key_user *user = NULL;
|
struct key_user *user = NULL;
|
||||||
|
@ -300,8 +299,6 @@ struct key *key_alloc(struct key_type *type, const char *desc,
|
||||||
|
|
||||||
if (!(flags & KEY_ALLOC_NOT_IN_QUOTA))
|
if (!(flags & KEY_ALLOC_NOT_IN_QUOTA))
|
||||||
key->flags |= 1 << KEY_FLAG_IN_QUOTA;
|
key->flags |= 1 << KEY_FLAG_IN_QUOTA;
|
||||||
if (flags & KEY_ALLOC_TRUSTED)
|
|
||||||
key->flags |= 1 << KEY_FLAG_TRUSTED;
|
|
||||||
if (flags & KEY_ALLOC_BUILT_IN)
|
if (flags & KEY_ALLOC_BUILT_IN)
|
||||||
key->flags |= 1 << KEY_FLAG_BUILTIN;
|
key->flags |= 1 << KEY_FLAG_BUILTIN;
|
||||||
|
|
||||||
|
@ -504,7 +501,7 @@ int key_instantiate_and_link(struct key *key,
|
||||||
if (keyring) {
|
if (keyring) {
|
||||||
if (keyring->restrict_link) {
|
if (keyring->restrict_link) {
|
||||||
ret = keyring->restrict_link(keyring, key->type,
|
ret = keyring->restrict_link(keyring, key->type,
|
||||||
key->flags, &prep.payload);
|
&prep.payload);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
@ -811,7 +808,6 @@ key_ref_t key_create_or_update(key_ref_t keyring_ref,
|
||||||
int ret;
|
int ret;
|
||||||
int (*restrict_link)(struct key *,
|
int (*restrict_link)(struct key *,
|
||||||
const struct key_type *,
|
const struct key_type *,
|
||||||
unsigned long,
|
|
||||||
const union key_payload *) = NULL;
|
const union key_payload *) = NULL;
|
||||||
|
|
||||||
/* look up the key type to see if it's one of the registered kernel
|
/* look up the key type to see if it's one of the registered kernel
|
||||||
|
@ -843,7 +839,6 @@ key_ref_t key_create_or_update(key_ref_t keyring_ref,
|
||||||
prep.data = payload;
|
prep.data = payload;
|
||||||
prep.datalen = plen;
|
prep.datalen = plen;
|
||||||
prep.quotalen = index_key.type->def_datalen;
|
prep.quotalen = index_key.type->def_datalen;
|
||||||
prep.trusted = flags & KEY_ALLOC_TRUSTED;
|
|
||||||
prep.expiry = TIME_T_MAX;
|
prep.expiry = TIME_T_MAX;
|
||||||
if (index_key.type->preparse) {
|
if (index_key.type->preparse) {
|
||||||
ret = index_key.type->preparse(&prep);
|
ret = index_key.type->preparse(&prep);
|
||||||
|
@ -860,9 +855,7 @@ key_ref_t key_create_or_update(key_ref_t keyring_ref,
|
||||||
index_key.desc_len = strlen(index_key.description);
|
index_key.desc_len = strlen(index_key.description);
|
||||||
|
|
||||||
if (restrict_link) {
|
if (restrict_link) {
|
||||||
unsigned long kflags = prep.trusted ? KEY_FLAG_TRUSTED : 0;
|
ret = restrict_link(keyring, index_key.type, &prep.payload);
|
||||||
ret = restrict_link(keyring,
|
|
||||||
index_key.type, kflags, &prep.payload);
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
key_ref = ERR_PTR(ret);
|
key_ref = ERR_PTR(ret);
|
||||||
goto error_free_prep;
|
goto error_free_prep;
|
||||||
|
|
|
@ -494,7 +494,6 @@ struct key *keyring_alloc(const char *description, kuid_t uid, kgid_t gid,
|
||||||
unsigned long flags,
|
unsigned long flags,
|
||||||
int (*restrict_link)(struct key *,
|
int (*restrict_link)(struct key *,
|
||||||
const struct key_type *,
|
const struct key_type *,
|
||||||
unsigned long,
|
|
||||||
const union key_payload *),
|
const union key_payload *),
|
||||||
struct key *dest)
|
struct key *dest)
|
||||||
{
|
{
|
||||||
|
@ -515,34 +514,10 @@ struct key *keyring_alloc(const char *description, kuid_t uid, kgid_t gid,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(keyring_alloc);
|
EXPORT_SYMBOL(keyring_alloc);
|
||||||
|
|
||||||
/**
|
|
||||||
* keyring_restrict_trusted_only - Restrict additions to a keyring to trusted keys only
|
|
||||||
* @keyring: The keyring being added to.
|
|
||||||
* @type: The type of key being added.
|
|
||||||
* @flags: The key flags.
|
|
||||||
* @payload: The payload of the key intended to be added.
|
|
||||||
*
|
|
||||||
* Reject the addition of any links to a keyring that point to keys that aren't
|
|
||||||
* marked as being trusted. It can be overridden by passing
|
|
||||||
* KEY_ALLOC_BYPASS_RESTRICTION to key_instantiate_and_link() when adding a key
|
|
||||||
* to a keyring.
|
|
||||||
*
|
|
||||||
* This is meant to be passed as the restrict_link parameter to
|
|
||||||
* keyring_alloc().
|
|
||||||
*/
|
|
||||||
int keyring_restrict_trusted_only(struct key *keyring,
|
|
||||||
const struct key_type *type,
|
|
||||||
unsigned long flags,
|
|
||||||
const union key_payload *payload)
|
|
||||||
{
|
|
||||||
return flags & KEY_FLAG_TRUSTED ? 0 : -EPERM;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* restrict_link_reject - Give -EPERM to restrict link
|
* restrict_link_reject - Give -EPERM to restrict link
|
||||||
* @keyring: The keyring being added to.
|
* @keyring: The keyring being added to.
|
||||||
* @type: The type of key being added.
|
* @type: The type of key being added.
|
||||||
* @flags: The key flags.
|
|
||||||
* @payload: The payload of the key intended to be added.
|
* @payload: The payload of the key intended to be added.
|
||||||
*
|
*
|
||||||
* Reject the addition of any links to a keyring. It can be overridden by
|
* Reject the addition of any links to a keyring. It can be overridden by
|
||||||
|
@ -554,7 +529,6 @@ int keyring_restrict_trusted_only(struct key *keyring,
|
||||||
*/
|
*/
|
||||||
int restrict_link_reject(struct key *keyring,
|
int restrict_link_reject(struct key *keyring,
|
||||||
const struct key_type *type,
|
const struct key_type *type,
|
||||||
unsigned long flags,
|
|
||||||
const union key_payload *payload)
|
const union key_payload *payload)
|
||||||
{
|
{
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
@ -1248,8 +1222,7 @@ static int __key_link_check_restriction(struct key *keyring, struct key *key)
|
||||||
{
|
{
|
||||||
if (!keyring->restrict_link)
|
if (!keyring->restrict_link)
|
||||||
return 0;
|
return 0;
|
||||||
return keyring->restrict_link(keyring,
|
return keyring->restrict_link(keyring, key->type, &key->payload);
|
||||||
key->type, key->flags, &key->payload);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Загрузка…
Ссылка в новой задаче