Commit 7845bc39 authored by David Howells's avatar David Howells Committed by James Morris

KEYS: Give key types their own lockdep class for key->sem

Give keys their own lockdep class to differentiate them from each other in case
a key of one type has to refer to a key of another type.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarMimi Zohar <zohar@us.ibm.com>
Signed-off-by: default avatarJames Morris <jmorris@namei.org>
parent 24942c8e
...@@ -92,6 +92,7 @@ struct key_type { ...@@ -92,6 +92,7 @@ struct key_type {
/* internal fields */ /* internal fields */
struct list_head link; /* link in types list */ struct list_head link; /* link in types list */
struct lock_class_key lock_class; /* key->sem lock class */
}; };
extern struct key_type key_type_keyring; extern struct key_type key_type_keyring;
......
...@@ -291,6 +291,7 @@ struct key *key_alloc(struct key_type *type, const char *desc, ...@@ -291,6 +291,7 @@ struct key *key_alloc(struct key_type *type, const char *desc,
atomic_set(&key->usage, 1); atomic_set(&key->usage, 1);
init_rwsem(&key->sem); init_rwsem(&key->sem);
lockdep_set_class(&key->sem, &type->lock_class);
key->type = type; key->type = type;
key->user = user; key->user = user;
key->quotalen = quotalen; key->quotalen = quotalen;
...@@ -946,6 +947,8 @@ int register_key_type(struct key_type *ktype) ...@@ -946,6 +947,8 @@ int register_key_type(struct key_type *ktype)
struct key_type *p; struct key_type *p;
int ret; int ret;
memset(&ktype->lock_class, 0, sizeof(ktype->lock_class));
ret = -EEXIST; ret = -EEXIST;
down_write(&key_types_sem); down_write(&key_types_sem);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment