linux/arch/s390
Harald Freudenberger 23d1aee92b s390/crypto: rework generate_entropy function for pseudo random dd
Here is a rework of the generate_entropy function of the pseudo random
device driver exploiting the prno CPACF instruction.

George Spelvin pointed out some issues with the existing
implementation. One point was, that the buffer used to store the stckf
values is 2 pages which are initially filled with get_random_bytes()
for each 64 byte junk produced by the function. Another point was that
the stckf values only carry entropy in the LSB and thus a buffer of
2 pages is not really needed. Then there was a comment about the use
of the kimd cpacf function without proper initialization.

The rework addresses these points and now one page is used and only
one half of this is filled with get_random_bytes() on each chunk of 64
bytes requested data. The other half of the page is filled with stckf
values exored into with an overlap of 4 bytes. This can be done due to
the fact that only the lower 4 bytes carry entropy we need.  For more
details about the algorithm used, see the header of the function.

The generate_entropy() function now uses the cpacf function klmd with
proper initialization of the parameter block to perform the sha512
hash.

George also pointed out some issues with the internal buffers used for
seeding and reads. These buffers are now zeroed with memzero_implicit
after use.

Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Reported-by: George Spelvin <lkml@sdf.org>
Suggested-by: George Spelvin <lkml@sdf.org>
Reviewed-by: Patrick Steuer <steuer@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2019-04-25 15:34:08 +02:00
..
appldata sched: loadavg: consolidate LOAD_INT, LOAD_FRAC, CALC_LOAD 2018-10-26 16:26:32 -07:00
boot s390/protvirt: block kernel command line alteration 2019-04-10 17:47:22 +02:00
configs fscrypt: remove filesystem specific build config option 2019-01-23 23:56:43 -05:00
crypto s390/crypto: rework generate_entropy function for pseudo random dd 2019-04-25 15:34:08 +02:00
hypfs s390/hypfs: no need to check return value of debugfs_create functions 2019-01-28 15:58:54 +01:00
include s390/mm: fix pxd_bad with folded page tables 2019-04-24 13:28:50 +02:00
kernel s390/cpum_cf_diag: Add support for CPU-MF SVN 6 2019-04-23 16:30:06 +02:00
kvm ARM: some cleanups, direct physical timer assignment, cache sanitization 2019-03-15 15:00:28 -07:00
lib s390/kasan: improve string/memory functions checks 2019-01-18 09:34:18 +01:00
mm s390/mm: convert to the generic get_user_pages_fast code 2019-04-23 16:30:04 +02:00
net s390: Convert IS_ENABLED uses to __is_defined 2019-04-11 13:36:53 +02:00
numa treewide: add checks for the return value of memblock_alloc*() 2019-03-12 10:04:02 -07:00
oprofile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pci s390 updates for the 5.1 merge window 2019-03-05 11:13:10 -08:00
purgatory s390: clean up stacks setup 2018-09-20 13:20:29 +02:00
scripts s390: make chkbss work with clang 2019-04-11 13:36:52 +02:00
tools kbuild: use assignment instead of define ... endef for filechk_* rules 2019-01-06 10:22:35 +09:00
defconfig s390: update defconfigs 2018-11-05 15:10:27 +01:00
Kbuild s390/kexec_file: Add purgatory 2018-04-16 09:10:22 +02:00
Kconfig s390/mm: convert to the generic get_user_pages_fast code 2019-04-23 16:30:04 +02:00
Kconfig.debug Kconfig: consolidate the "Kernel hacking" menu 2018-08-02 08:06:48 +09:00
Makefile s390: remove -fno-strength-reduce flag 2019-04-11 13:36:46 +02:00