Skip to content

Commit c4741b2

Browse files
ebiggersherbertx
authored andcommitted
crypto: run initcalls for generic implementations earlier
Use subsys_initcall for registration of all templates and generic algorithm implementations, rather than module_init. Then change cryptomgr to use arch_initcall, to place it before the subsys_initcalls. This is needed so that when both a generic and optimized implementation of an algorithm are built into the kernel (not loadable modules), the generic implementation is registered before the optimized one. Otherwise, the self-tests for the optimized implementation are unable to allocate the generic implementation for the new comparison fuzz tests. Note that on arm, a side effect of this change is that self-tests for generic implementations may run before the unaligned access handler has been installed. So, unaligned accesses will crash the kernel. This is arguably a good thing as it makes it easier to detect that type of bug. Signed-off-by: Eric Biggers <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
1 parent 40153b1 commit c4741b2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+89
-83
lines changed

crypto/842.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ static int __init crypto842_mod_init(void)
144144

145145
return ret;
146146
}
147-
module_init(crypto842_mod_init);
147+
subsys_initcall(crypto842_mod_init);
148148

149149
static void __exit crypto842_mod_exit(void)
150150
{

crypto/adiantum.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ static void __exit adiantum_module_exit(void)
659659
crypto_unregister_template(&adiantum_tmpl);
660660
}
661661

662-
module_init(adiantum_module_init);
662+
subsys_initcall(adiantum_module_init);
663663
module_exit(adiantum_module_exit);
664664

665665
MODULE_DESCRIPTION("Adiantum length-preserving encryption mode");

crypto/aegis128.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ static void __exit crypto_aegis128_module_exit(void)
448448
crypto_unregister_aead(&crypto_aegis128_alg);
449449
}
450450

451-
module_init(crypto_aegis128_module_init);
451+
subsys_initcall(crypto_aegis128_module_init);
452452
module_exit(crypto_aegis128_module_exit);
453453

454454
MODULE_LICENSE("GPL");

crypto/aegis128l.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ static void __exit crypto_aegis128l_module_exit(void)
512512
crypto_unregister_aead(&crypto_aegis128l_alg);
513513
}
514514

515-
module_init(crypto_aegis128l_module_init);
515+
subsys_initcall(crypto_aegis128l_module_init);
516516
module_exit(crypto_aegis128l_module_exit);
517517

518518
MODULE_LICENSE("GPL");

crypto/aegis256.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ static void __exit crypto_aegis256_module_exit(void)
463463
crypto_unregister_aead(&crypto_aegis256_alg);
464464
}
465465

466-
module_init(crypto_aegis256_module_init);
466+
subsys_initcall(crypto_aegis256_module_init);
467467
module_exit(crypto_aegis256_module_exit);
468468

469469
MODULE_LICENSE("GPL");

crypto/aes_generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1470,7 +1470,7 @@ static void __exit aes_fini(void)
14701470
crypto_unregister_alg(&aes_alg);
14711471
}
14721472

1473-
module_init(aes_init);
1473+
subsys_initcall(aes_init);
14741474
module_exit(aes_fini);
14751475

14761476
MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");

crypto/algboss.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,13 @@ static void __exit cryptomgr_exit(void)
296296
BUG_ON(err);
297297
}
298298

299-
subsys_initcall(cryptomgr_init);
299+
/*
300+
* This is arch_initcall() so that the crypto self-tests are run on algorithms
301+
* registered early by subsys_initcall(). subsys_initcall() is needed for
302+
* generic implementations so that they're available for comparison tests when
303+
* other implementations are registered later by module_init().
304+
*/
305+
arch_initcall(cryptomgr_init);
300306
module_exit(cryptomgr_exit);
301307

302308
MODULE_LICENSE("GPL");

crypto/ansi_cprng.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ MODULE_DESCRIPTION("Software Pseudo Random Number Generator");
472472
MODULE_AUTHOR("Neil Horman <[email protected]>");
473473
module_param(dbg, int, 0);
474474
MODULE_PARM_DESC(dbg, "Boolean to enable debugging (0/1 == off/on)");
475-
module_init(prng_mod_init);
475+
subsys_initcall(prng_mod_init);
476476
module_exit(prng_mod_fini);
477477
MODULE_ALIAS_CRYPTO("stdrng");
478478
MODULE_ALIAS_CRYPTO("ansi_cprng");

crypto/anubis.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,7 @@ static void __exit anubis_mod_fini(void)
699699
crypto_unregister_alg(&anubis_alg);
700700
}
701701

702-
module_init(anubis_mod_init);
702+
subsys_initcall(anubis_mod_init);
703703
module_exit(anubis_mod_fini);
704704

705705
MODULE_LICENSE("GPL");

crypto/arc4.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ static void __exit arc4_exit(void)
163163
crypto_unregister_skcipher(&arc4_skcipher);
164164
}
165165

166-
module_init(arc4_init);
166+
subsys_initcall(arc4_init);
167167
module_exit(arc4_exit);
168168

169169
MODULE_LICENSE("GPL");

crypto/authenc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ static void __exit crypto_authenc_module_exit(void)
508508
crypto_unregister_template(&crypto_authenc_tmpl);
509509
}
510510

511-
module_init(crypto_authenc_module_init);
511+
subsys_initcall(crypto_authenc_module_init);
512512
module_exit(crypto_authenc_module_exit);
513513

514514
MODULE_LICENSE("GPL");

crypto/authencesn.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ static void __exit crypto_authenc_esn_module_exit(void)
523523
crypto_unregister_template(&crypto_authenc_esn_tmpl);
524524
}
525525

526-
module_init(crypto_authenc_esn_module_init);
526+
subsys_initcall(crypto_authenc_esn_module_init);
527527
module_exit(crypto_authenc_esn_module_exit);
528528

529529
MODULE_LICENSE("GPL");

crypto/blowfish_generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ static void __exit blowfish_mod_fini(void)
133133
crypto_unregister_alg(&alg);
134134
}
135135

136-
module_init(blowfish_mod_init);
136+
subsys_initcall(blowfish_mod_init);
137137
module_exit(blowfish_mod_fini);
138138

139139
MODULE_LICENSE("GPL");

crypto/camellia_generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1092,7 +1092,7 @@ static void __exit camellia_fini(void)
10921092
crypto_unregister_alg(&camellia_alg);
10931093
}
10941094

1095-
module_init(camellia_init);
1095+
subsys_initcall(camellia_init);
10961096
module_exit(camellia_fini);
10971097

10981098
MODULE_DESCRIPTION("Camellia Cipher Algorithm");

crypto/cast5_generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,7 @@ static void __exit cast5_mod_fini(void)
543543
crypto_unregister_alg(&alg);
544544
}
545545

546-
module_init(cast5_mod_init);
546+
subsys_initcall(cast5_mod_init);
547547
module_exit(cast5_mod_fini);
548548

549549
MODULE_LICENSE("GPL");

crypto/cast6_generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ static void __exit cast6_mod_fini(void)
285285
crypto_unregister_alg(&alg);
286286
}
287287

288-
module_init(cast6_mod_init);
288+
subsys_initcall(cast6_mod_init);
289289
module_exit(cast6_mod_fini);
290290

291291
MODULE_LICENSE("GPL");

crypto/cbc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ static void __exit crypto_cbc_module_exit(void)
9898
crypto_unregister_template(&crypto_cbc_tmpl);
9999
}
100100

101-
module_init(crypto_cbc_module_init);
101+
subsys_initcall(crypto_cbc_module_init);
102102
module_exit(crypto_cbc_module_exit);
103103

104104
MODULE_LICENSE("GPL");

crypto/ccm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1014,7 +1014,7 @@ static void __exit crypto_ccm_module_exit(void)
10141014
ARRAY_SIZE(crypto_ccm_tmpls));
10151015
}
10161016

1017-
module_init(crypto_ccm_module_init);
1017+
subsys_initcall(crypto_ccm_module_init);
10181018
module_exit(crypto_ccm_module_exit);
10191019

10201020
MODULE_LICENSE("GPL");

crypto/cfb.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ static void __exit crypto_cfb_module_exit(void)
243243
crypto_unregister_template(&crypto_cfb_tmpl);
244244
}
245245

246-
module_init(crypto_cfb_module_init);
246+
subsys_initcall(crypto_cfb_module_init);
247247
module_exit(crypto_cfb_module_exit);
248248

249249
MODULE_LICENSE("GPL");

crypto/chacha20poly1305.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ static void __exit chacha20poly1305_module_exit(void)
725725
ARRAY_SIZE(rfc7539_tmpls));
726726
}
727727

728-
module_init(chacha20poly1305_module_init);
728+
subsys_initcall(chacha20poly1305_module_init);
729729
module_exit(chacha20poly1305_module_exit);
730730

731731
MODULE_LICENSE("GPL");

crypto/chacha_generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ static void __exit chacha_generic_mod_fini(void)
201201
crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
202202
}
203203

204-
module_init(chacha_generic_mod_init);
204+
subsys_initcall(chacha_generic_mod_init);
205205
module_exit(chacha_generic_mod_fini);
206206

207207
MODULE_LICENSE("GPL");

crypto/cmac.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ static void __exit crypto_cmac_module_exit(void)
313313
crypto_unregister_template(&crypto_cmac_tmpl);
314314
}
315315

316-
module_init(crypto_cmac_module_init);
316+
subsys_initcall(crypto_cmac_module_init);
317317
module_exit(crypto_cmac_module_exit);
318318

319319
MODULE_LICENSE("GPL");

crypto/crc32_generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ static void __exit crc32_mod_fini(void)
146146
crypto_unregister_shash(&alg);
147147
}
148148

149-
module_init(crc32_mod_init);
149+
subsys_initcall(crc32_mod_init);
150150
module_exit(crc32_mod_fini);
151151

152152
MODULE_AUTHOR("Alexander Boyko <[email protected]>");

crypto/crc32c_generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ static void __exit crc32c_mod_fini(void)
165165
crypto_unregister_shash(&alg);
166166
}
167167

168-
module_init(crc32c_mod_init);
168+
subsys_initcall(crc32c_mod_init);
169169
module_exit(crc32c_mod_fini);
170170

171171
MODULE_AUTHOR("Clay Haapala <[email protected]>");

crypto/crct10dif_generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ static void __exit crct10dif_mod_fini(void)
112112
crypto_unregister_shash(&alg);
113113
}
114114

115-
module_init(crct10dif_mod_init);
115+
subsys_initcall(crct10dif_mod_init);
116116
module_exit(crct10dif_mod_fini);
117117

118118
MODULE_AUTHOR("Tim Chen <[email protected]>");

crypto/crypto_null.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ static void __exit crypto_null_mod_fini(void)
220220
crypto_unregister_skcipher(&skcipher_null);
221221
}
222222

223-
module_init(crypto_null_mod_init);
223+
subsys_initcall(crypto_null_mod_init);
224224
module_exit(crypto_null_mod_fini);
225225

226226
MODULE_LICENSE("GPL");

crypto/ctr.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ static void __exit crypto_ctr_module_exit(void)
384384
ARRAY_SIZE(crypto_ctr_tmpls));
385385
}
386386

387-
module_init(crypto_ctr_module_init);
387+
subsys_initcall(crypto_ctr_module_init);
388388
module_exit(crypto_ctr_module_exit);
389389

390390
MODULE_LICENSE("GPL");

crypto/cts.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ static void __exit crypto_cts_module_exit(void)
423423
crypto_unregister_template(&crypto_cts_tmpl);
424424
}
425425

426-
module_init(crypto_cts_module_init);
426+
subsys_initcall(crypto_cts_module_init);
427427
module_exit(crypto_cts_module_exit);
428428

429429
MODULE_LICENSE("Dual BSD/GPL");

crypto/deflate.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ static void __exit deflate_mod_fini(void)
334334
crypto_unregister_scomps(scomp, ARRAY_SIZE(scomp));
335335
}
336336

337-
module_init(deflate_mod_init);
337+
subsys_initcall(deflate_mod_init);
338338
module_exit(deflate_mod_fini);
339339

340340
MODULE_LICENSE("GPL");

crypto/des_generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,7 @@ static void __exit des_generic_mod_fini(void)
990990
crypto_unregister_algs(des_algs, ARRAY_SIZE(des_algs));
991991
}
992992

993-
module_init(des_generic_mod_init);
993+
subsys_initcall(des_generic_mod_init);
994994
module_exit(des_generic_mod_fini);
995995

996996
MODULE_LICENSE("GPL");

crypto/dh.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ static void dh_exit(void)
236236
crypto_unregister_kpp(&dh);
237237
}
238238

239-
module_init(dh_init);
239+
subsys_initcall(dh_init);
240240
module_exit(dh_exit);
241241
MODULE_ALIAS_CRYPTO("dh");
242242
MODULE_LICENSE("GPL");

crypto/drbg.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2039,7 +2039,7 @@ static void __exit drbg_exit(void)
20392039
crypto_unregister_rngs(drbg_algs, (ARRAY_SIZE(drbg_cores) * 2));
20402040
}
20412041

2042-
module_init(drbg_init);
2042+
subsys_initcall(drbg_init);
20432043
module_exit(drbg_exit);
20442044
#ifndef CRYPTO_DRBG_HASH_STRING
20452045
#define CRYPTO_DRBG_HASH_STRING ""

crypto/ecb.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ static void __exit crypto_ecb_module_exit(void)
101101
crypto_unregister_template(&crypto_ecb_tmpl);
102102
}
103103

104-
module_init(crypto_ecb_module_init);
104+
subsys_initcall(crypto_ecb_module_init);
105105
module_exit(crypto_ecb_module_exit);
106106

107107
MODULE_LICENSE("GPL");

crypto/ecdh.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ static void ecdh_exit(void)
166166
crypto_unregister_kpp(&ecdh);
167167
}
168168

169-
module_init(ecdh_init);
169+
subsys_initcall(ecdh_init);
170170
module_exit(ecdh_exit);
171171
MODULE_ALIAS_CRYPTO("ecdh");
172172
MODULE_LICENSE("GPL");

crypto/echainiv.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ static void __exit echainiv_module_exit(void)
174174
crypto_unregister_template(&echainiv_tmpl);
175175
}
176176

177-
module_init(echainiv_module_init);
177+
subsys_initcall(echainiv_module_init);
178178
module_exit(echainiv_module_exit);
179179

180180
MODULE_LICENSE("GPL");

crypto/fcrypt.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ static void __exit fcrypt_mod_fini(void)
414414
crypto_unregister_alg(&fcrypt_alg);
415415
}
416416

417-
module_init(fcrypt_mod_init);
417+
subsys_initcall(fcrypt_mod_init);
418418
module_exit(fcrypt_mod_fini);
419419

420420
MODULE_LICENSE("Dual BSD/GPL");

crypto/fips.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,5 @@ static void __exit fips_exit(void)
7474
crypto_proc_fips_exit();
7575
}
7676

77-
module_init(fips_init);
77+
subsys_initcall(fips_init);
7878
module_exit(fips_exit);

crypto/gcm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1258,7 +1258,7 @@ static void __exit crypto_gcm_module_exit(void)
12581258
ARRAY_SIZE(crypto_gcm_tmpls));
12591259
}
12601260

1261-
module_init(crypto_gcm_module_init);
1261+
subsys_initcall(crypto_gcm_module_init);
12621262
module_exit(crypto_gcm_module_exit);
12631263

12641264
MODULE_LICENSE("GPL");

crypto/ghash-generic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ static void __exit ghash_mod_exit(void)
149149
crypto_unregister_shash(&ghash_alg);
150150
}
151151

152-
module_init(ghash_mod_init);
152+
subsys_initcall(ghash_mod_init);
153153
module_exit(ghash_mod_exit);
154154

155155
MODULE_LICENSE("GPL");

crypto/hmac.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ static void __exit hmac_module_exit(void)
268268
crypto_unregister_template(&hmac_tmpl);
269269
}
270270

271-
module_init(hmac_module_init);
271+
subsys_initcall(hmac_module_init);
272272
module_exit(hmac_module_exit);
273273

274274
MODULE_LICENSE("GPL");

crypto/jitterentropy-kcapi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ static void __exit jent_mod_exit(void)
198198
crypto_unregister_rng(&jent_alg);
199199
}
200200

201-
module_init(jent_mod_init);
201+
subsys_initcall(jent_mod_init);
202202
module_exit(jent_mod_exit);
203203

204204
MODULE_LICENSE("Dual BSD/GPL");

crypto/keywrap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ static void __exit crypto_kw_exit(void)
310310
crypto_unregister_template(&crypto_kw_tmpl);
311311
}
312312

313-
module_init(crypto_kw_init);
313+
subsys_initcall(crypto_kw_init);
314314
module_exit(crypto_kw_exit);
315315

316316
MODULE_LICENSE("Dual BSD/GPL");

crypto/khazad.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -875,7 +875,7 @@ static void __exit khazad_mod_fini(void)
875875
}
876876

877877

878-
module_init(khazad_mod_init);
878+
subsys_initcall(khazad_mod_init);
879879
module_exit(khazad_mod_fini);
880880

881881
MODULE_LICENSE("GPL");

crypto/lrw.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ static void __exit crypto_module_exit(void)
433433
crypto_unregister_template(&crypto_tmpl);
434434
}
435435

436-
module_init(crypto_module_init);
436+
subsys_initcall(crypto_module_init);
437437
module_exit(crypto_module_exit);
438438

439439
MODULE_LICENSE("GPL");

0 commit comments

Comments
 (0)