[PATCH v9] seedrng: import SeedRNG utility for kernel RNG seed files
Bernhard Reutner-Fischer
rep.dot.nop at gmail.com
Wed Apr 20 13:55:45 UTC 2022
Hi Jason!
On Tue, 19 Apr 2022 12:50:05 +0200
"Jason A. Donenfeld" <Jason at zx2c4.com> wrote:
> The RNG can't actually be seeded from a shell script, due to the
> reliance on ioctls and the fact that entropy written into the
> unprivileged /dev/urandom device is not immediately mixed in, making
> subsequent seed reads dangerous. For this reason, the seedrng project
> provides a basic "C script" meant to be copy and pasted into projects
> like Busybox and tweaked as needed: <https://git.zx2c4.com/seedrng/about/>.
>
> The SeedRNG construction has been part of systemd's seeder since
> January, and recently was added to Android, OpenRC, and Void's Runit,
> with more integrations on their way depending on context. Virtually
> every single Busybox-based distro I have seen seeds things in wrong,
> incomplete, or otherwise dangerous way. For example, fixing this issue
> in Buildroot requires first for Busybox to have this fix.
>
> This commit imports it into Busybox and wires up the basic config. The
> utility itself is tiny, and unlike the example code from the SeedRNG
> project, we can re-use libbb's existing hash functions, rather than
> having to ship a standalone BLAKE2s, which makes this even smaller.
>
> This adds only about 2k to a defconfig binary:
>
> function old new delta
> seedrng_main - 1061 +1061
> seed_from_file_if_exists - 468 +468
> .rodata 100243 100610 +367
> packed_usage 34414 34480 +66
> static.longopts - 26 +26
> applet_names 2747 2755 +8
> applet_main 3192 3200 +8
> ------------------------------------------------------------------------------
> (add/remove: 4/0 grow/shrink: 4/0 up/down: 2004/0) Total: 2004 bytes
> text data bss dec hex filename
> 1050657 16499 1816 1068972 104fac busybox_old
> 1052780 16515 1816 1071111 105807 busybox_unstripped
I've applied this v9 now, thanks for the patch and thanks a lot for your
patience!
PS: make bloatometer gives for me on x86_64 for this v9:
function old new delta
seedrng_main - 958 +958
seed_from_file_if_exists - 417 +417
.rodata 107858 108206 +348
packed_usage 34414 34480 +66
static.longopts - 26 +26
applet_names 2747 2755 +8
applet_main 3192 3200 +8
------------------------------------------------------------------------------
(add/remove: 4/0 grow/shrink: 4/0 up/down: 1831/0) Total: 1831 bytes
text data bss dec hex filename
973776 4219 1816 979811 ef363 busybox_old
975714 4227 1816 981757 efafd busybox_unstripped
and the size of the applet is
text data bss dec hex filename
1805 0 0 1805 70d util-linux/seedrng.o
As said, there's room for at least another 150b savings, but let's defer
that to another round of code-golf ;)
thanks,
More information about the busybox
mailing list