Commit 31de2873 authored by Jarkko Sakkinen's avatar Jarkko Sakkinen
Browse files

KEYS: trusted: Rollback init_trusted() consistently



Do bind neither static calls nor trusted_key_exit() before a successful
init, in order to maintain a consistent state. In addition, depart the
init_trusted() in the case of a real error (i.e. getting back something
else than -ENODEV).

Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Closes: https://lore.kernel.org/linux-integrity/CAHk-=whOPoLaWM8S8GgoOPT7a2+nMH5h3TLKtn=R_3w4R1_Uvg@mail.gmail.com/


Cc: stable@vger.kernel.org # v5.13+
Fixes: 5d0682be ("KEYS: trusted: Add generic trusted keys framework")
Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
parent e017769f
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -358,17 +358,17 @@ static int __init init_trusted(void)
		if (!get_random)
			get_random = kernel_get_random;

		static_call_update(trusted_key_seal,
				   trusted_key_sources[i].ops->seal);
		static_call_update(trusted_key_unseal,
				   trusted_key_sources[i].ops->unseal);
		static_call_update(trusted_key_get_random,
				   get_random);
		ret = trusted_key_sources[i].ops->init();
		if (!ret) {
			static_call_update(trusted_key_seal, trusted_key_sources[i].ops->seal);
			static_call_update(trusted_key_unseal, trusted_key_sources[i].ops->unseal);
			static_call_update(trusted_key_get_random, get_random);

			trusted_key_exit = trusted_key_sources[i].ops->exit;
			migratable = trusted_key_sources[i].ops->migratable;
		}

		ret = trusted_key_sources[i].ops->init();
		if (!ret)
		if (!ret || ret != -ENODEV)
			break;
	}