CVE-2022-48629

CVE-2022-48629

High · published March 5, 2024

CVSS v3.1
8.1
EPSS
1%
Percentile
44.3
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

crypto: qcom-rng - ensure buffer for generate is completely filled

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).

The record
Technical detail
CVSS v3.1
8.1 · HIGH
Vector
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
CVSS v4.0
Not supplied
EPSS
0.00535 · 44.3th percentile
Published
2024-03-05T17:15Z
Affected products (13)
ProductVersionsFixed in
linux/linux_kernel≥ 4.19, < 4.19.2364.19.236
linux/linux_kernel≥ 4.20, < 5.4.1875.4.187
linux/linux_kernel≥ 5.5, < 5.10.1085.10.108
linux/linux_kernel≥ 5.11, < 5.15.315.15.31
linux/linux_kernel≥ 5.16, < 5.16.175.16.17
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (12)
EPSS history
Timeline
  • 05 MAR 11:18Z
    crypto: qcom-rng - ensure buffer for generate is completely filled
    cvelistv5