提交 0620fddb 编写于 作者: E Eric Biggers 提交者: James Morris

KEYS: sanitize key structs before freeing

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: NEric Biggers <ebiggers@google.com>
Signed-off-by: NDavid Howells <dhowells@redhat.com>
Signed-off-by: NJames Morris <james.l.morris@oracle.com>
上级 ee618b46
...@@ -173,7 +173,6 @@ struct key { ...@@ -173,7 +173,6 @@ struct key {
#ifdef KEY_DEBUGGING #ifdef KEY_DEBUGGING
unsigned magic; unsigned magic;
#define KEY_DEBUG_MAGIC 0x18273645u #define KEY_DEBUG_MAGIC 0x18273645u
#define KEY_DEBUG_MAGIC_X 0xf8e9dacbu
#endif #endif
unsigned long flags; /* status flags (change with bitops) */ unsigned long flags; /* status flags (change with bitops) */
......
...@@ -158,9 +158,7 @@ static noinline void key_gc_unused_keys(struct list_head *keys) ...@@ -158,9 +158,7 @@ static noinline void key_gc_unused_keys(struct list_head *keys)
kfree(key->description); kfree(key->description);
#ifdef KEY_DEBUGGING memzero_explicit(key, sizeof(*key));
key->magic = KEY_DEBUG_MAGIC_X;
#endif
kmem_cache_free(key_jar, key); kmem_cache_free(key_jar, key);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册