diff options
| -rw-r--r-- | include/linux/key-type.h | 1 | ||||
| -rw-r--r-- | security/keys/key.c | 3 |
2 files changed, 4 insertions, 0 deletions
diff --git a/include/linux/key-type.h b/include/linux/key-type.h index 9efd081bb31e..39e3c082c49d 100644 --- a/include/linux/key-type.h +++ b/include/linux/key-type.h | |||
| @@ -92,6 +92,7 @@ struct key_type { | |||
| 92 | 92 | ||
| 93 | /* internal fields */ | 93 | /* internal fields */ |
| 94 | struct list_head link; /* link in types list */ | 94 | struct list_head link; /* link in types list */ |
| 95 | struct lock_class_key lock_class; /* key->sem lock class */ | ||
| 95 | }; | 96 | }; |
| 96 | 97 | ||
| 97 | extern struct key_type key_type_keyring; | 98 | extern struct key_type key_type_keyring; |
diff --git a/security/keys/key.c b/security/keys/key.c index 4414abddcb5b..4f64c7267afb 100644 --- a/security/keys/key.c +++ b/security/keys/key.c | |||
| @@ -291,6 +291,7 @@ struct key *key_alloc(struct key_type *type, const char *desc, | |||
| 291 | 291 | ||
| 292 | atomic_set(&key->usage, 1); | 292 | atomic_set(&key->usage, 1); |
| 293 | init_rwsem(&key->sem); | 293 | init_rwsem(&key->sem); |
| 294 | lockdep_set_class(&key->sem, &type->lock_class); | ||
| 294 | key->type = type; | 295 | key->type = type; |
| 295 | key->user = user; | 296 | key->user = user; |
| 296 | key->quotalen = quotalen; | 297 | key->quotalen = quotalen; |
| @@ -946,6 +947,8 @@ int register_key_type(struct key_type *ktype) | |||
| 946 | struct key_type *p; | 947 | struct key_type *p; |
| 947 | int ret; | 948 | int ret; |
| 948 | 949 | ||
| 950 | memset(&ktype->lock_class, 0, sizeof(ktype->lock_class)); | ||
| 951 | |||
| 949 | ret = -EEXIST; | 952 | ret = -EEXIST; |
| 950 | down_write(&key_types_sem); | 953 | down_write(&key_types_sem); |
| 951 | 954 | ||
