Skip to content

Commit

Permalink
KEYS: sanitize key structs before freeing
Browse files Browse the repository at this point in the history
While a 'struct key' itself normally does not contain sensitive
information, Documentation/security/keys.txt actually encourages this:

     "Having a payload is not required; and the payload can, in fact,
     just be a value stored in the struct key itself."

In case someone has taken this advice, or will take this advice in the
future, zero the key structure before freeing it.  We might as well, and
as a bonus this could make it a bit more difficult for an adversary to
determine which keys have recently been in use.

This is safe because the key_jar cache does not use a constructor.

Signed-off-by: Eric Biggers <[email protected]>
Signed-off-by: David Howells <[email protected]>
Signed-off-by: James Morris <[email protected]>
  • Loading branch information
ebiggers authored and James Morris committed Jun 9, 2017
1 parent ee618b4 commit 0620fdd
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 4 deletions.
1 change: 0 additions & 1 deletion include/linux/key.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,6 @@ struct key {
#ifdef KEY_DEBUGGING
unsigned magic;
#define KEY_DEBUG_MAGIC 0x18273645u
#define KEY_DEBUG_MAGIC_X 0xf8e9dacbu
#endif

unsigned long flags; /* status flags (change with bitops) */
Expand Down
4 changes: 1 addition & 3 deletions security/keys/gc.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,7 @@ static noinline void key_gc_unused_keys(struct list_head *keys)

kfree(key->description);

#ifdef KEY_DEBUGGING
key->magic = KEY_DEBUG_MAGIC_X;
#endif
memzero_explicit(key, sizeof(*key));
kmem_cache_free(key_jar, key);
}
}
Expand Down

0 comments on commit 0620fdd

Please sign in to comment.