|
@@ -115,3 +115,26 @@ int asymmetric_verify(struct key *keyring, const char *sig,
|
|
pr_debug("%s() = %d\n", __func__, ret);
|
|
pr_debug("%s() = %d\n", __func__, ret);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * integrity_kernel_module_request - prevent crypto-pkcs1pad(rsa,*) requests
|
|
|
|
+ * @kmod_name: kernel module name
|
|
|
|
+ *
|
|
|
|
+ * We have situation, when public_key_verify_signature() in case of RSA
|
|
|
|
+ * algorithm use alg_name to store internal information in order to
|
|
|
|
+ * construct an algorithm on the fly, but crypto_larval_lookup() will try
|
|
|
|
+ * to use alg_name in order to load kernel module with same name.
|
|
|
|
+ * Since we don't have any real "crypto-pkcs1pad(rsa,*)" kernel modules,
|
|
|
|
+ * we are safe to fail such module request from crypto_larval_lookup().
|
|
|
|
+ *
|
|
|
|
+ * In this way we prevent modprobe execution during digsig verification
|
|
|
|
+ * and avoid possible deadlock if modprobe and/or it's dependencies
|
|
|
|
+ * also signed with digsig.
|
|
|
|
+ */
|
|
|
|
+int integrity_kernel_module_request(char *kmod_name)
|
|
|
|
+{
|
|
|
|
+ if (strncmp(kmod_name, "crypto-pkcs1pad(rsa,", 20) == 0)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|