Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KEYS: Fix stale key registration at error path

When loading encrypted-keys module, if the last check of
aes_get_sizes() in init_encrypted() fails, the driver just returns an
error without unregistering its key type. This results in the stale
entry in the list. In addition to memory leaks, this leads to a kernel
crash when registering a new key type later.

This patch fixes the problem by swapping the calls of aes_get_sizes()
and register_key_type(), and releasing resources properly at the error
paths.

Bugzilla: https://bugzilla.opensuse.org/show_bug.cgi?id=908163
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>

authored by

Takashi Iwai and committed by
Mimi Zohar
b26bdde5 b2d1965d

+4 -1
+4 -1
security/keys/encrypted-keys/encrypted.c
··· 1017 1017 ret = encrypted_shash_alloc(); 1018 1018 if (ret < 0) 1019 1019 return ret; 1020 + ret = aes_get_sizes(); 1021 + if (ret < 0) 1022 + goto out; 1020 1023 ret = register_key_type(&key_type_encrypted); 1021 1024 if (ret < 0) 1022 1025 goto out; 1023 - return aes_get_sizes(); 1026 + return 0; 1024 1027 out: 1025 1028 encrypted_shash_release(); 1026 1029 return ret;