|
@@ -14,6 +14,7 @@
|
|
|
*/
|
|
|
|
|
|
#include <crypto/internal/skcipher.h>
|
|
|
+#include <linux/cpumask.h>
|
|
|
#include <linux/err.h>
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/kernel.h>
|
|
@@ -25,6 +26,8 @@
|
|
|
|
|
|
#include "internal.h"
|
|
|
|
|
|
+static const char *skcipher_default_geniv __read_mostly;
|
|
|
+
|
|
|
static int setkey_unaligned(struct crypto_ablkcipher *tfm, const u8 *key,
|
|
|
unsigned int keylen)
|
|
|
{
|
|
@@ -180,7 +183,8 @@ EXPORT_SYMBOL_GPL(crypto_givcipher_type);
|
|
|
|
|
|
const char *crypto_default_geniv(const struct crypto_alg *alg)
|
|
|
{
|
|
|
- return alg->cra_flags & CRYPTO_ALG_ASYNC ? "eseqiv" : "chainiv";
|
|
|
+ return alg->cra_flags & CRYPTO_ALG_ASYNC ?
|
|
|
+ "eseqiv" : skcipher_default_geniv;
|
|
|
}
|
|
|
|
|
|
static int crypto_givcipher_default(struct crypto_alg *alg, u32 type, u32 mask)
|
|
@@ -361,3 +365,17 @@ err:
|
|
|
return ERR_PTR(err);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(crypto_alloc_ablkcipher);
|
|
|
+
|
|
|
+static int __init skcipher_module_init(void)
|
|
|
+{
|
|
|
+ skcipher_default_geniv = num_possible_cpus() > 1 ?
|
|
|
+ "eseqiv" : "chainiv";
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void skcipher_module_exit(void)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+module_init(skcipher_module_init);
|
|
|
+module_exit(skcipher_module_exit);
|