Revision 92347cfd62c174ab91ad97dd4bfbaa1d4aa28e67 authored by Mark Rutland on 08 June 2017, 13:47:41 UTC, committed by James Morris on 09 June 2017, 03:29:50 UTC
If a key's refcount is dropped to zero between key_lookup() peeking at
the refcount and subsequently attempting to increment it, refcount_inc()
will see a zero refcount.  Here, refcount_inc() will WARN_ONCE(), and
will *not* increment the refcount, which will remain zero.

Once key_lookup() drops key_serial_lock, it is possible for the key to
be freed behind our back.

This patch uses refcount_inc_not_zero() to perform the peek and increment
atomically.

Fixes: fff292914d3a2f1e ("security, keys: convert key.usage from atomic_t to refcount_t")
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Cc: David Windsor <dwindsor@gmail.com>
Cc: Elena Reshetova <elena.reshetova@intel.com>
Cc: Hans Liljestrand <ishkamiel@gmail.com>
Cc: James Morris <james.l.morris@oracle.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: James Morris <james.l.morris@oracle.com>
1 parent 7cbe093
History
File Mode Size
.gitignore -rw-r--r-- 151 bytes
Kconfig -rw-r--r-- 8.0 KB
Makefile -rw-r--r-- 2.0 KB
gen_init_cpio.c -rw-r--r-- 12.7 KB
initramfs_data.S -rw-r--r-- 1.3 KB

back to top