1- From 14dbacba9d2b0fed496d74908539385dd391820b Mon Sep 17 00:00:00 2001
1+ From de92c8e12d9306f8166942c0b40b8d139856ca2b Mon Sep 17 00:00:00 2001
22From: Stephan Mueller <smueller@chronox.de>
33Date: Sat, 1 Feb 2025 11:53:01 +0100
4- Subject: [PATCH v58 01/25] LRNG: Entropy Source and DRNG Manager
4+ Subject: [PATCH v60 01/25] LRNG: Entropy Source and DRNG Manager
55
66The kernel crypto API contains deterministic random number generators
77(DRNG) which a caller must seed and reseed. The task of seeding a DRNG
@@ -201,7 +201,7 @@ Signed-off-by: Stephan Mueller <smueller@chronox.de>
201201 create mode 100644 include/linux/lrng.h
202202
203203diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
204- index 8fb33c90482f..0a09ee313ada 100644
204+ index d2cfc584e202..7f5de8969a49 100644
205205--- a/drivers/char/Kconfig
206206+++ b/drivers/char/Kconfig
207207@@ -423,4 +423,6 @@ config ADI
@@ -212,10 +212,10 @@ index 8fb33c90482f..0a09ee313ada 100644
212212+
213213 endmenu
214214diff --git a/drivers/char/Makefile b/drivers/char/Makefile
215- index e9b360cdc99a..ee08348a94b8 100644
215+ index 1291369b9126..455c6dfb050e 100644
216216--- a/drivers/char/Makefile
217217+++ b/drivers/char/Makefile
218- @@ -43 ,3 +43 ,5 @@ obj-$(CONFIG_PS3_FLASH) += ps3flash.o
218+ @@ -44 ,3 +44 ,5 @@ obj-$(CONFIG_PS3_FLASH) += ps3flash.o
219219 obj-$(CONFIG_XILLYBUS_CLASS) += xillybus/
220220 obj-$(CONFIG_POWERNV_OP_PANEL) += powernv-op-panel.o
221221 obj-$(CONFIG_ADI) += adi.o
@@ -1461,7 +1461,7 @@ index 000000000000..7ae10f20b4b8
14611461+ #endif /* _LRNG_DRNG_ATOMIC_H */
14621462diff --git a/drivers/char/lrng/lrng_drng_chacha20.c b/drivers/char/lrng/lrng_drng_chacha20.c
14631463new file mode 100644
1464- index 000000000000..31be102e3007
1464+ index 000000000000..36960fdd715c
14651465--- /dev/null
14661466+++ b/drivers/char/lrng/lrng_drng_chacha20.c
14671467@@ -0,0 +1,195 @@
@@ -1504,7 +1504,7 @@ index 000000000000..31be102e3007
15041504+ BUILD_BUG_ON(CHACHA_BLOCK_SIZE != 2 * CHACHA_KEY_SIZE);
15051505+
15061506+ if (used_words > CHACHA_KEY_SIZE_WORDS) {
1507- + chacha20_block(& chacha20->constants[0] , (u8 *)tmp);
1507+ + chacha20_block((struct chacha_state *) chacha20, (u8 *)tmp);
15081508+ for (i = 0; i < CHACHA_KEY_SIZE_WORDS; i++)
15091509+ chacha20->key.u[i] ^= le32_to_cpu(tmp[i]);
15101510+ memzero_explicit(tmp, sizeof(tmp));
@@ -1574,13 +1574,13 @@ index 000000000000..31be102e3007
15741574+ int zeroize_buf = 0;
15751575+
15761576+ while (outbuflen >= CHACHA_BLOCK_SIZE) {
1577- + chacha20_block(& chacha20->constants[0] , outbuf);
1577+ + chacha20_block((struct chacha_state *) chacha20, outbuf);
15781578+ outbuf += CHACHA_BLOCK_SIZE;
15791579+ outbuflen -= CHACHA_BLOCK_SIZE;
15801580+ }
15811581+
15821582+ if (outbuflen) {
1583- + chacha20_block(& chacha20->constants[0] , (u8 *)aligned_buf);
1583+ + chacha20_block((struct chacha_state *) chacha20, (u8 *)aligned_buf);
15841584+ memcpy(outbuf, aligned_buf, outbuflen);
15851585+ used = ((outbuflen + sizeof(aligned_buf[0]) - 1) /
15861586+ sizeof(aligned_buf[0]));
@@ -1662,7 +1662,7 @@ index 000000000000..31be102e3007
16621662+ #endif /* CONFIG_LRNG_DFLT_DRNG_CHACHA20 */
16631663diff --git a/drivers/char/lrng/lrng_drng_chacha20.h b/drivers/char/lrng/lrng_drng_chacha20.h
16641664new file mode 100644
1665- index 000000000000..fee6571281b6
1665+ index 000000000000..8e1eb8c1ec96
16661666--- /dev/null
16671667+++ b/drivers/char/lrng/lrng_drng_chacha20.h
16681668@@ -0,0 +1,42 @@
@@ -1696,7 +1696,7 @@ index 000000000000..fee6571281b6
16961696+
16971697+ static inline void lrng_cc20_init_rfc7539(struct chacha20_block *chacha20)
16981698+ {
1699- + chacha_init_consts(chacha20->constants);
1699+ + chacha_init_consts((struct chacha_state *) chacha20->constants);
17001700+ }
17011701+
17021702+ #define LRNG_CC20_INIT_RFC7539(x) \
@@ -3078,7 +3078,7 @@ index 000000000000..cf982b9eea05
30783078+ #endif /* _LRNG_ES_RANDOM_H */
30793079diff --git a/drivers/char/lrng/lrng_es_mgr.c b/drivers/char/lrng/lrng_es_mgr.c
30803080new file mode 100644
3081- index 000000000000..4ed5de545a3a
3081+ index 000000000000..54c1f57cad1e
30823082--- /dev/null
30833083+++ b/drivers/char/lrng/lrng_es_mgr.c
30843084@@ -0,0 +1,528 @@
@@ -3260,7 +3260,7 @@ index 000000000000..4ed5de545a3a
32603260+ lrng_state.all_online_numa_node_seeded = false;
32613261+
32623262+ #ifdef CONFIG_VDSO_GETRANDOM
3263- + WRITE_ONCE(__arch_get_k_vdso_rng_data() ->is_ready, false);
3263+ + WRITE_ONCE(vdso_k_rng_data ->is_ready, false);
32643264+ #endif
32653265+
32663266+ pr_debug("reset LRNG\n");
@@ -3304,7 +3304,7 @@ index 000000000000..4ed5de545a3a
33043304+ * The LRNG does not enable the user space ChaCha20
33053305+ * DRNG in the VDSO.
33063306+ */
3307- + /* WRITE_ONCE(__arch_get_k_vdso_rng_data() ->is_ready, true); */
3307+ + /* WRITE_ONCE(vdso_k_rng_data ->is_ready, true); */
33083308+ #endif
33093309+
33103310+ wake_up_all(&lrng_init_wait);
@@ -3374,7 +3374,7 @@ index 000000000000..4ed5de545a3a
33743374+ lrng_state.lrng_fully_seeded = false;
33753375+
33763376+ #ifdef CONFIG_VDSO_GETRANDOM
3377- + WRITE_ONCE(__arch_get_k_vdso_rng_data() ->is_ready, false);
3377+ + WRITE_ONCE(vdso_k_rng_data ->is_ready, false);
33783378+ #endif
33793379+
33803380+ /* If sufficient entropy is available, reseed now. */
@@ -4448,5 +4448,5 @@ index 000000000000..c0d31a03d51f
44484448+
44494449+ #endif /* _LRNG_H */
44504450- -
4451- 2.48.1
4451+ 2.52.0
44524452
0 commit comments