Brian Masney
184f7bd08c
crypto: qcom-rng - ensure buffer for generate is completely filled
...
commit a680b1832ced3b5fa7c93484248fd221ea0d614b upstream.
The generate function in struct rng_alg expects that the destination
buffer is completely filled if the function returns 0. qcom_rng_read()
can run into a situation where the buffer is partially filled with
randomness and the remaining part of the buffer is zeroed since
qcom_rng_generate() doesn't check the return value. This issue can
be reproduced by running the following from libkcapi:
kcapi-rng -b 9000000 > OUTFILE
The generated OUTFILE will have three huge sections that contain all
zeros, and this is caused by the code where the test
'val & PRNG_STATUS_DATA_AVAIL' fails.
Let's fix this issue by ensuring that qcom_rng_read() always returns
with a full buffer if the function returns success. Let's also have
qcom_rng_generate() return the correct value.
Here's some statistics from the ent project
(https://www.fourmilab.ch/random/ ) that shows information about the
quality of the generated numbers:
$ ent -c qcom-random-before
Value Char Occurrences Fraction
0 606748 0.067416
1 33104 0.003678
2 33001 0.003667
...
253 � 32883 0.003654
254 � 33035 0.003671
255 � 33239 0.003693
Total: 9000000 1.000000
Entropy = 7.811590 bits per byte.
Optimum compression would reduce the size
of this 9000000 byte file by 2 percent.
Chi square distribution for 9000000 samples is 9329962.81, and
randomly would exceed this value less than 0.01 percent of the
times.
Arithmetic mean value of data bytes is 119.3731 (127.5 = random).
Monte Carlo value for Pi is 3.197293333 (error 1.77 percent).
Serial correlation coefficient is 0.159130 (totally uncorrelated =
0.0).
Without this patch, the results of the chi-square test is 0.01%, and
the numbers are certainly not random according to ent's project page.
The results improve with this patch:
$ ent -c qcom-random-after
Value Char Occurrences Fraction
0 35432 0.003937
1 35127 0.003903
2 35424 0.003936
...
253 � 35201 0.003911
254 � 34835 0.003871
255 � 35368 0.003930
Total: 9000000 1.000000
Entropy = 7.999979 bits per byte.
Optimum compression would reduce the size
of this 9000000 byte file by 0 percent.
Chi square distribution for 9000000 samples is 258.77, and randomly
would exceed this value 42.24 percent of the times.
Arithmetic mean value of data bytes is 127.5006 (127.5 = random).
Monte Carlo value for Pi is 3.141277333 (error 0.01 percent).
Serial correlation coefficient is 0.000468 (totally uncorrelated =
0.0).
This change was tested on a Nexus 5 phone (msm8974 SoC).
Signed-off-by: Brian Masney <bmasney@redhat.com>
Fixes: ceec5f5b59 ("crypto: qcom-rng - Add Qcom prng driver")
Cc: stable@vger.kernel.org # 4.19+
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Reviewed-by: Andrew Halaney <ahalaney@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-03-23 09:12:06 +01:00
..
accessibility
acpi
Revert "ACPI: PM: s2idle: Cancel wakeup before dispatching EC GPE"
2022-03-11 11:22:39 +01:00
amba
ARM: 9120/1: Revert "amba: make use of -1 IRQs warn"
2021-11-06 13:59:45 +01:00
android
binder: fix handling of error during copy
2022-01-27 09:19:38 +01:00
ata
ata: pata_hpt37x: fix PCI clock detection
2022-03-08 19:07:46 +01:00
atm
atm: firestream: check the return value of ioremap() in fs_init()
2022-03-19 13:40:17 +01:00
auxdisplay
auxdisplay: ht16k33: Fix frame buffer device blanking
2021-11-17 09:48:45 +01:00
base
PM: s2idle: ACPI: Fix wakeup interrupts handling
2022-02-16 12:52:50 +01:00
bcma
bcma: Fix memory leak for internally-handled cores
2021-09-15 09:47:37 +02:00
block
virtio-blk: Don't use MAX_DISCARD_SEGMENTS if max_discard_seg is zero
2022-03-16 13:21:45 +01:00
bluetooth
Bluetooth: hci_bcm: Check for error irq
2022-01-27 09:19:36 +01:00
bus
bus: ti-sysc: Use CLKDM_NOAUTO for dra7 dcan1 for errata i893
2021-10-13 10:08:19 +02:00
cdrom
char
random: do not throw away excess input to crng_fast_load
2022-01-27 09:19:46 +01:00
clk
clk: qcom: gdsc: Add support to update GDSC transition delay
2022-03-16 13:21:44 +01:00
clocksource
clocksource/drivers/timer-ti-dm: Select TIMER_OF
2021-11-17 09:48:39 +01:00
connector
counter
counter: 104-quad-8: Return error when invalid mode during ceiling_write
2021-09-15 09:47:34 +02:00
cpufreq
cpufreq: Fix initialization of min and max frequency QoS requests
2022-01-27 09:19:44 +01:00
cpuidle
cpuidle: Fix kobject memory leaks in error paths
2021-11-17 09:48:36 +01:00
crypto
crypto: qcom-rng - ensure buffer for generate is completely filled
2022-03-23 09:12:06 +01:00
dax
dca
devfreq
dio
dma
dmaengine: shdma: Fix runtime PM imbalance on error
2022-03-08 19:07:45 +01:00
dma-buf
dma_fence_array: Fix PENDING_ERROR leak in dma_fence_array_signaled()
2022-01-27 09:19:28 +01:00
edac
EDAC: Fix calculation of returned address and next offset in edac_align_ptr()
2022-02-23 11:59:59 +01:00
eisa
extcon
extcon: intel-mrfld: Sync hardware and software state on init
2021-07-19 08:53:16 +02:00
firewire
firmware
arm/arm64: smccc/psci: add arm_smccc_1_1_get_conduit()
2022-03-11 11:22:37 +01:00
fpga
fpga: machxo2-spi: Fix missing error code in machxo2_write_complete()
2021-09-30 10:09:23 +02:00
fsi
fsi/sbefifo: Fix reset timeout
2021-07-14 16:53:42 +02:00
gnss
gpio
gpio: ts4900: Do not set DAT and OE together
2022-03-16 13:21:46 +01:00
gpu
drm/vrr: Set VRR capable prop only if it is attached to connector
2022-03-19 13:40:17 +01:00
greybus
hid
HID: add mapping for KEY_ALL_APPLICATIONS
2022-03-08 19:07:50 +01:00
hsi
HSI: core: Fix return freed object in hsi_new_client
2022-01-27 09:19:41 +01:00
hv
Drivers: hv: vmbus: Fix memory leak in vmbus_add_channel_kobj
2022-02-23 12:00:00 +01:00
hwmon
hwmon: (dell-smm) Speed up setting of fan speed
2022-02-16 12:52:53 +01:00
hwspinlock
hwtracing
intel_th: Wait until port is in reset before programming it
2021-07-20 16:10:46 +02:00
i2c
i2c: qup: allow COMPILE_TEST
2022-03-08 19:07:46 +01:00
i3c
ide
idle
iio
iio: Fix error handling for PM
2022-03-02 11:41:12 +01:00
infiniband
RDMA/ib_srp: Fix a deadlock
2022-03-02 11:41:10 +01:00
input
Input: elan_i2c - fix regulator enable count imbalance after suspend/resume
2022-03-08 19:07:50 +01:00
interconnect
iommu
iommu/amd: Fix loop timeout issue in iommu_ga_log_enable()
2022-02-08 18:24:30 +01:00
ipack
ipack: ipoctal: fix module reference leak
2021-10-06 15:42:36 +02:00
irqchip
irqchip/sifive-plic: Add missing thead,c900-plic match string
2022-02-23 12:00:00 +01:00
isdn
mISDN: change function names to avoid conflicts
2022-01-11 15:23:33 +01:00
leds
leds: trigger: audio: Add an activate callback to ensure the initial brightness is set
2021-09-15 09:47:33 +02:00
lightnvm
macintosh
mailbox
mcb
mcb: fix error handling in mcb_alloc_bus()
2021-09-30 10:09:22 +02:00
md
dm space map common: add bounds check to sm_ll_lookup_bitmap()
2022-01-27 09:19:46 +01:00
media
media: rcar-csi2: Optimize the selection PHTW register
2022-01-27 09:19:51 +01:00
memory
memory: fsl_ifc: fix leak of irq and nand_irq in fsl_ifc_ctrl_probe
2021-11-17 09:48:42 +01:00
memstick
memstick: jmb38x_ms: use appropriate free function in jmb38x_ms_alloc_host()
2021-11-17 09:48:37 +01:00
message
mfd
mfd: intel-lpss: Fix too early PM enablement in the ACPI ->probe()
2022-01-16 09:15:38 +01:00
misc
eeprom: ee1004: limit i2c reads to I2C_SMBUS_BLOCK_MAX
2022-02-16 12:52:52 +01:00
mmc
mmc: meson: Fix usage of meson_mmc_post_req()
2022-03-16 13:21:47 +01:00
mtd
mtd: rawnand: brcmnand: Fixed incorrect sub-page ECC status
2022-02-23 11:59:59 +01:00
mux
net
sfc: extend the locking on mcdi->seqno
2022-03-19 13:40:17 +01:00
nfc
NFC: port100: fix use-after-free in port100_send_complete
2022-03-16 13:21:46 +01:00
ntb
NTB: perf: Fix an error code in perf_setup_inbuf()
2021-09-22 12:26:44 +02:00
nubus
nvdimm
libnvdimm/pmem: Fix crash triggered when I/O in-flight during unbind
2021-10-06 15:42:38 +02:00
nvme
nvme-rdma: fix possible use-after-free in transport error_recovery work
2022-02-23 11:59:56 +01:00
nvmem
nvmem: Fix shift-out-of-bound (UBSAN) with byte size cells
2021-10-20 11:40:14 +02:00
of
of: base: Improve argument length mismatch error
2022-01-27 09:19:51 +01:00
opp
opp: Fix return in _opp_add_static_v2()
2021-11-17 09:48:44 +01:00
oprofile
parisc
parisc: Fix sglist access in ccio-dma.c
2022-02-23 11:59:54 +01:00
parport
parport: remove non-zero check on count
2021-09-22 12:26:36 +02:00
pci
PCI: pciehp: Fix infinite loop in IRQ handler upon power fault
2022-02-05 12:35:36 +01:00
pcmcia
pcmcia: fix setting of kthread task states
2022-01-27 09:19:37 +01:00
perf
drivers/perf: fix the missed ida_simple_remove() in ddr_perf_probe()
2021-07-14 16:53:14 +02:00
phy
phy: uniphier-usb3ss: fix unintended writing zeros to PHY register
2022-01-27 09:19:39 +01:00
pinctrl
pinctrl: bcm2835: Fix a few error paths
2022-02-08 18:24:33 +01:00
platform
platform/x86: ISST: Fix possible circular locking dependency detected
2022-02-23 11:59:55 +01:00
pnp
power
power: bq25890: Enable continuous conversion for ADC at charging
2022-01-27 09:19:49 +01:00
powercap
pps
ps3
ptp
ptp_pch: Load module automatically if ID matches
2021-10-13 10:08:19 +02:00
pwm
pwm: stm32-lp: Don't modify HW state in .remove() callback
2021-09-26 14:07:13 +02:00
rapidio
ras
regulator
regulator: qcom_smd: Align probe function with rpmh-regulator
2022-01-27 09:19:46 +01:00
remoteproc
reset
reset: socfpga: add empty driver allowing consumers to probe
2021-11-17 09:48:20 +01:00
rpmsg
rpmsg: char: Fix race between the release of rpmsg_eptdev and cdev
2022-02-01 17:24:36 +01:00
rtc
rtc: cmos: Evaluate century appropriate
2022-02-08 18:24:34 +01:00
s390
scsi: zfcp: Fix failed recovery on gone remote port with non-NPIV FCP devices
2022-02-01 17:24:33 +01:00
sbus
scsi
xen/scsifront: don't use gnttab_query_foreign_access() for mapped status
2022-03-11 11:22:39 +01:00
sfi
sh
maple: fix wrong return value of maple_bus_init().
2021-11-26 10:47:17 +01:00
siox
slimbus
slimbus: ngd: reset dma setup during runtime pm
2021-08-26 08:36:21 -04:00
soc
soc: fsl: qe: Check of ioremap return value
2022-03-08 19:07:49 +01:00
soundwire
soundwire: stream: Fix test for DP prepare complete
2021-07-14 16:53:45 +02:00
spi
spi: spi-zynq-qspi: Fix a NULL pointer dereference in zynq_qspi_exec_mem_op()
2022-03-02 11:41:10 +01:00
spmi
ssb
ssb: Fix error return code in ssb_bus_scan()
2021-07-14 16:53:29 +02:00
staging
staging: gdm724x: fix use after free in gdm_lte_rx()
2022-03-16 13:21:47 +01:00
target
scsi: target: iscsi: Make sure the np under each tpg is unique
2022-02-16 12:52:48 +01:00
tc
tee
optee: use driver internal tee_context for some rpc
2022-03-02 11:41:04 +01:00
thermal
thermal: core: Reset previous low and high trip during thermal zone init
2021-12-08 09:01:09 +01:00
thunderbolt
tty
tty: n_gsm: fix NULL pointer access due to DLCI release
2022-03-02 11:41:16 +01:00
uio
usb
usb: gadget: clear related members when goto fail
2022-03-08 19:07:46 +01:00
vfio
vfio: Use config not menuconfig for VFIO_NOIOMMU
2021-09-22 12:26:23 +02:00
vhost
vhost/vsock: don't check owner in vhost_vsock_stop() while releasing
2022-03-02 11:41:00 +01:00
video
vgacon: Propagate console boot parameters before calling `vc_resize'
2021-12-08 09:01:13 +01:00
virt
virtio
virtio: acknowledge all features before access
2022-03-16 13:21:48 +01:00
visorbus
visorbus: fix error return code in visorchipset_init()
2021-07-14 16:53:42 +02:00
vlynq
vme
w1
w1: Misuse of get_user()/put_user() reported by sparse
2022-01-27 09:19:48 +01:00
watchdog
ar7: fix kernel builds for compiler test
2021-11-17 09:48:46 +01:00
xen
xen/gnttab: fix gnttab_end_foreign_access() without page specified
2022-03-11 11:22:39 +01:00
zorro
Kconfig
Makefile