summaryrefslogtreecommitdiffstats
path: root/security/keys/internal.h
diff options
context:
space:
mode:
authorElena Reshetova2017-03-31 14:20:49 +0200
committerJames Morris2017-04-03 02:49:06 +0200
commitddb99e118e37f324a4be65a411bb60ae62795cf9 (patch)
tree9fecb40084bb937fafa04eaf57d9bc4ae3bcb6a9 /security/keys/internal.h
parentsecurity, keys: convert key.usage from atomic_t to refcount_t (diff)
downloadkernel-qcow2-linux-ddb99e118e37f324a4be65a411bb60ae62795cf9.tar.gz
kernel-qcow2-linux-ddb99e118e37f324a4be65a411bb60ae62795cf9.tar.xz
kernel-qcow2-linux-ddb99e118e37f324a4be65a411bb60ae62795cf9.zip
security, keys: convert key_user.usage from atomic_t to refcount_t
refcount_t type and corresponding API should be used instead of atomic_t when the variable is used as a reference counter. This allows to avoid accidental refcounter overflows that might lead to use-after-free situations. Signed-off-by: Elena Reshetova <elena.reshetova@intel.com> Signed-off-by: Hans Liljestrand <ishkamiel@gmail.com> Signed-off-by: Kees Cook <keescook@chromium.org> Signed-off-by: David Windsor <dwindsor@gmail.com> Acked-by: David Howells <dhowells@redhat.com> Signed-off-by: James Morris <james.l.morris@oracle.com>
Diffstat (limited to 'security/keys/internal.h')
-rw-r--r--security/keys/internal.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/security/keys/internal.h b/security/keys/internal.h
index a2f4c0abb8d8..6bee06ae026d 100644
--- a/security/keys/internal.h
+++ b/security/keys/internal.h
@@ -17,6 +17,7 @@
#include <linux/key-type.h>
#include <linux/task_work.h>
#include <linux/keyctl.h>
+#include <linux/refcount.h>
struct iovec;
@@ -53,7 +54,7 @@ struct key_user {
struct rb_node node;
struct mutex cons_lock; /* construction initiation lock */
spinlock_t lock;
- atomic_t usage; /* for accessing qnkeys & qnbytes */
+ refcount_t usage; /* for accessing qnkeys & qnbytes */
atomic_t nkeys; /* number of keys */
atomic_t nikeys; /* number of instantiated keys */
kuid_t uid;