Skip to content

[fips-9-compliant] Rebase Custom changes to 5.14.0-570.25.1.el9_6 #410

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: fips-9-compliant/5.14.0-570.25.1.el9_6
Choose a base branch
from

Conversation

PlaidCat
Copy link
Collaborator

Update process (This kernel CentOS base for 5.14.0-570)

  • Kernel History Rebuild Process for all src.rpms hosted by RESF
  • Create fips-9-compliant/5.14.0-570.X.1.el8_10 branch
  • Check if any maintained code is included in the new el release.
  • Cherry-pick all code from previous branch into new branch (skipping unneeded code)
    • Fix conflicts as they arise
  • Build and Test

Removed Commits

Just GitHub commits

[rolling release update] Removing commits from the new branch
96794508804e8d69a557061700908bb1781d7ab7 github actions: Update Actions to deal with devel

Forward Port Process

[rolling release update] 0 of 21 commits have FIPS protected changes

[jmaple@devbox code]$ cat RR.FIPS.resf_kernel-5.14.0-570.25.1.el9_6.log
[rolling release update] Rolling Product:  fips-9-compliant
[rolling release update] Checking out branch:  fips-9-compliant/5.14.0-570.23.1.el9_6
[rolling release update] Gathering all the RESF kernel Tags
b'08b6475feb07 (tag: resf_kernel-5.14.0-570.23.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.23.1.el9_6'
b'667004a38548 (tag: resf_kernel-5.14.0-570.22.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.22.1.el9_6'
b'9477e3364951 (tag: resf_kernel-5.14.0-570.21.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.21.1.el9_6'
b'b94108159618 (tag: resf_kernel-5.14.0-570.19.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.19.1.el9_6'
b'e8b954c95fef (tag: resf_kernel-5.14.0-570.18.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.18.1.el9_6'
b'838cd1e8d046 (tag: resf_kernel-5.14.0-570.17.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.17.1.el9_6'
b'171ceb527773 (tag: resf_kernel-5.14.0-570.16.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.16.1.el9_6'
b'18c0812a6563 (tag: resf_kernel-5.14.0-570.12.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.12.1.el9_6'
[rolling release update] Old Rolling Branch Tags:  [b'08b6475feb07', b'667004a38548', b'9477e3364951', b'b94108159618', b'e8b954c95fef', b'838cd1e8d046', b'171ceb527773', b'18c0812a6563']
[rolling release update] Checking out branch:  rocky9_6
[rolling release update] Gathering all the RESF kernel Tags
b'cad0cbcb03be (HEAD -> rocky9_6, tag: resf_kernel-5.14.0-570.25.1.el9_6, origin/rocky9_6) Rebuild rocky9_6 with kernel-5.14.0-570.25.1.el9_6'
b'4743a27158ca (tag: resf_kernel-5.14.0-570.24.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.24.1.el9_6'
b'08b6475feb07 (tag: resf_kernel-5.14.0-570.23.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.23.1.el9_6'
b'667004a38548 (tag: resf_kernel-5.14.0-570.22.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.22.1.el9_6'
b'9477e3364951 (tag: resf_kernel-5.14.0-570.21.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.21.1.el9_6'
b'b94108159618 (tag: resf_kernel-5.14.0-570.19.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.19.1.el9_6'
b'e8b954c95fef (tag: resf_kernel-5.14.0-570.18.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.18.1.el9_6'
b'838cd1e8d046 (tag: resf_kernel-5.14.0-570.17.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.17.1.el9_6'
b'171ceb527773 (tag: resf_kernel-5.14.0-570.16.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.16.1.el9_6'
b'18c0812a6563 (tag: resf_kernel-5.14.0-570.12.1.el9_6) Rebuild rocky9_6 with kernel-5.14.0-570.12.1.el9_6'
[rolling release update] New Base Branch Tags:  [b'cad0cbcb03be', b'4743a27158ca', b'08b6475feb07', b'667004a38548', b'9477e3364951', b'b94108159618', b'e8b954c95fef', b'838cd1e8d046', b'171ceb527773', b'18c0812a6563']
[rolling release update] Common tag sha:  b'08b6475feb07'
"08b6475feb0710ce784c7dda662b85e110bea9d9 Rebuild rocky9_6 with kernel-5.14.0-570.23.1.el9_6"
[rolling release update] Checking for FIPS protected changes between the common tag and HEAD
[rolling release update] Checking for FIPS protected changes
[rolling release update] Getting SHAS 08b6475feb07..HEAD
[rolling release update] Number of commits to check:  21
[rolling release update] Checking modifications of shas
[rolling release update] Checked 2 of 21 commits
[rolling release update] Checked 4 of 21 commits
[rolling release update] Checked 6 of 21 commits
[rolling release update] Checked 8 of 21 commits
[rolling release update] Checked 10 of 21 commits
[rolling release update] Checked 12 of 21 commits
[rolling release update] Checked 14 of 21 commits
[rolling release update] Checked 16 of 21 commits
[rolling release update] Checked 18 of 21 commits
[rolling release update] Checked 20 of 21 commits
[rolling release update] 0 of 21 commits have FIPS protected changes
[rolling release update] Checking out old rolling branch:  fips-9-compliant/5.14.0-570.23.1.el9_6
[rolling release update] Finding the CIQ Kernel and Associated Upstream commits between the last resf tag and HEAD
[rolling release update] Getting SHAS 08b6475feb07..HEAD
[rolling release update] Last RESF tag sha:  b'08b6475feb07'
[rolling release update] Total Commit in old branch:  12
{ "CIQ COMMMIT" : "UPSTREAM COMMMIT" }
Printing first 5 and last 5 commits
{
  "51923823e82894df6a74ddda5bcef41f40f18f2a": "",
  "28160b611374a15f24e6d8c101761c9d728a864e": "",
  "f2e53737348d4487fcde5a932114586b6b580b8b": "",
  "2dbc32693082f737ac747ce5bfbeb321a98d8e83": "",
  "40e07be5e01ab954a1f03860517ff3f6c696d2a8": ""
}
{
  "abbe7593a85a5d485162981cd617edd1a12cda0a": "",
  "7193bf0b15ad735a5ec113f4dc35174bb4917523": "",
  "254e14125d77e0029cf68d2d02f912d419efa16e": "",
  "4d0040be1f3804cc0cfc6519a49ffe414958167b": "",
  "96794508804e8d69a557061700908bb1781d7ab7": ""
}
[rolling release update] Checking out new base branch:  rocky9_6
[rolling release update] Finding the kernel version for the new rolling release
b'cad0cbcb03be (HEAD -> rocky9_6, tag: resf_kernel-5.14.0-570.25.1.el9_6, origin/rocky9_6) Rebuild rocky9_6 with kernel-5.14.0-570.25.1.el9_6'
<re.Match object; span=(0, 70), match=b'cad0cbcb03be (HEAD -> rocky9_6, tag: resf_kernel>
[rolling release update} New Branch to create  fips-9-compliant/5.14.0-570.25.1.el9_6
[rolling release update] Check if branch Exists:  fips-9-compliant/5.14.0-570.25.1.el9_6
Branch fips-9-compliant/5.14.0-570.25.1.el9_6 does not exists creating
[rolling release update] Creating new branch for PR:  jmaple_fips-9-compliant/5.14.0-570.25.1.el9_6
[rolling release update] Creating Map of all new commits from last rolling release fork
[rolling release update] Total Commit in new branch:  20
{ "CIQ COMMMIT" : "UPSTREAM COMMMIT" }
Printing first 5 and last 5 commits
{
  "cad0cbcb03be58a6773b9f611dcc85138af73030": "",
  "8766d311440a3d83beeba0fbc44375c52afc3c31": "c8af247de385ce49afabc3bf1cf4fd455c94bfe8",
  "7add85a2d6e4ee06a4a3d61a032f733c5311ee4e": "4c2227656d9003f4d77afc76f34dd81b95e4c2c4",
  "8fb1e012e90e870c106fb6ffec532b5b441f0c2e": "4d4832ed13ff505fe0371544b4773e79be2bb964",
  "8a1a728b59fcbb50efda2d7ce968927481bd254b": "087c1faa594fa07a66933d750c0b2610aa1a2946"
}
{
  "db880e107329adb57df019fd8645cc88404eec16": "fcf857ee1958e9247298251f7615d0c76f1e9b38",
  "833cb8c3b04f7a9388bf8ca65c16d107d7521b54": "eb3fabde15bccdf34f1c9b35a83aa4c0dacbb4ca",
  "1c248300e40d1d0c624eb171ed294908a5450ee1": "62e2a47ceab8f3f7d2e3f0e03fdd1c5e0059fd8b",
  "fcc060fe1b3ede393f8318c956e8e8224aaf7118": "b4bac279319d3082eb42f074799c7b18ba528c71",
  "96794508804e8d69a557061700908bb1781d7ab7": ""
}
[rolling release update] Checking if any of the commits from the old rolling release are already present in the new base branch
- CIQ Commit 96794508804e8d69a557061700908bb1781d7ab7 already present in new base branch: 96794508804e8d69a557061700908bb1781d7ab7 github actions: Update Actions to deal with devel
[rolling release update] Removing commits from the new branch
96794508804e8d69a557061700908bb1781d7ab7 github actions: Update Actions to deal with devel
[rolling release update] Applying the remaining commits to the new branch
Applying commit  "4d0040be1f3804cc0cfc6519a49ffe414958167b crypto: jitter - replace LFSR with SHA3-256"
Applying commit  "254e14125d77e0029cf68d2d02f912d419efa16e crypto: aead,cipher - zeroize key buffer after use"
Applying commit  "7193bf0b15ad735a5ec113f4dc35174bb4917523 SUSE: patch: crypto-ecdh-implement-FIPS-PCT.patch"
Applying commit  "abbe7593a85a5d485162981cd617edd1a12cda0a crypto: ecdh - explicitly zeroize private_key"
Applying commit  "ca84d884818a8d58b0dda08b92c1939f3c10fce0 crypto: lib/mpi - Fix unexpected pointer access in mpi_ec_init"
Applying commit  "47ede346d221e657feb8e0c01a7891d3b4a3583b In essiv_aead_setkey(), use the same logic as crypto_authenc_esn_setkey() to zeroize keys on exit. converting ws"
Applying commit  "40e07be5e01ab954a1f03860517ff3f6c696d2a8 crypto: drbg - Align buffers to at least a cache line"
Applying commit  "2dbc32693082f737ac747ce5bfbeb321a98d8e83 mm/gup: introduce pin_user_pages_fast_only()"
Applying commit  "f2e53737348d4487fcde5a932114586b6b580b8b crypto: rng - Convert crypto_default_rng_refcnt into an unsigned int"
Applying commit  "28160b611374a15f24e6d8c101761c9d728a864e crypto: rng - Fix priority inversions due to mutex locks"
Applying commit  "51923823e82894df6a74ddda5bcef41f40f18f2a crypto: rng - Implement fast per-CPU DRBG instances"

KBuild

[jmaple@devbox code]$ egrep -B 5 -A 5 "\[TIMER\]|^Starting Build" kbuild.jmaple_fips-9-compliant_5.14.0-570.25.1.el9_6.log
/mnt/code/kernel-src-tree-build
no .config file found, moving on
[TIMER]{MRPROPER}: 0s
x86_64 architecture detected, copying config
'configs/kernel-x86_64-rhel.config' -> '.config'
Setting Local Version for build
CONFIG_LOCALVERSION="-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7"
Making olddefconfig
--
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
Starting Build
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_x32.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/include/generated/asm/unistd_32_ia32.h
--
  BTF [M] sound/usb/snd-usb-audio.ko
  BTF [M] sound/x86/snd-hdmi-lpe-audio.ko
  LD [M]  sound/xen/snd_xen_front.ko
  BTF [M] sound/virtio/virtio_snd.ko
  BTF [M] sound/xen/snd_xen_front.ko
[TIMER]{BUILD}: 1832s
Making Modules
  INSTALL /lib/modules/5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+/kernel/arch/x86/crypto/blake2s-x86_64.ko
  INSTALL /lib/modules/5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+/kernel/arch/x86/crypto/blowfish-x86_64.ko
  INSTALL /lib/modules/5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+/kernel/arch/x86/crypto/camellia-aesni-avx-x86_64.ko
  INSTALL /lib/modules/5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+/kernel/arch/x86/crypto/camellia-aesni-avx2.ko
--
  STRIP   /lib/modules/5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+/kernel/sound/xen/snd_xen_front.ko
  SIGN    /lib/modules/5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+/kernel/sound/usb/snd-usb-audio.ko
  SIGN    /lib/modules/5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+/kernel/sound/xen/snd_xen_front.ko
  SIGN    /lib/modules/5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+/kernel/sound/x86/snd-hdmi-lpe-audio.ko
  DEPMOD  /lib/modules/5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+
[TIMER]{MODULES}: 9s
Making Install
sh ./arch/x86/boot/install.sh 5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+ \
        arch/x86/boot/bzImage System.map "/boot"
[TIMER]{INSTALL}: 23s
Checking kABI
Checking kABI
kABI check passed
Setting Default Kernel to /boot/vmlinuz-5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+ and Index to 4
Hopefully Grub2.0 took everything ... rebooting after time metrices
[TIMER]{MRPROPER}: 0s
[TIMER]{BUILD}: 1832s
[TIMER]{MODULES}: 9s
[TIMER]{INSTALL}: 23s
[TIMER]{TOTAL} 1870s
Rebooting in 10 seconds

KSelfTests

ls kselftest.5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-51923823e828+.log kselftest.5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+.log | while read line; do echo $line; grep '^ok ' $line | wc -l ; done

kselftest.5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-51923823e828+.log
317
kselftest.5.14.0-jmaple_fips-9-compliant_5.14.0-570.2-fa587fb71ec7+.log
317

jallisonciq and others added 11 commits July 10, 2025 14:21
        Using the kernel crypto API, the SHA3-256 algorithm is used as
        conditioning element to replace the LFSR in the Jitter RNG. All other
        parts of the Jitter RNG are unchanged.

        The application and use of the SHA-3 conditioning operation is identical
        to the user space Jitter RNG 3.4.0 by applying the following concept:

        - the Jitter RNG initializes a SHA-3 state which acts as the "entropy
          pool" when the Jitter RNG is allocated.

        - When a new time delta is obtained, it is inserted into the "entropy
          pool" with a SHA-3 update operation. Note, this operation in most of
          the cases is a simple memcpy() onto the SHA-3 stack.

        - To cause a true SHA-3 operation for each time delta operation, a
          second SHA-3 operation is performed hashing Jitter RNG status
          information. The final message digest is also inserted into the
          "entropy pool" with a SHA-3 update operation. Yet, this data is not
          considered to provide any entropy, but it shall stir the entropy pool.

        - To generate a random number, a SHA-3 final operation is performed to
          calculate a message digest followed by an immediate SHA-3 init to
          re-initialize the "entropy pool". The obtained message digest is one
          block of the Jitter RNG that is returned to the caller.

        Mathematically speaking, the random number generated by the Jitter RNG
        is:

        aux_t = SHA-3(Jitter RNG state data)

        Jitter RNG block = SHA-3(time_i || aux_i || time_(i-1) || aux_(i-1) ||
                                 ... || time_(i-255) || aux_(i-255))

        when assuming that the OSR = 1, i.e. the default value.

        This operation implies that the Jitter RNG has an output-blocksize of
        256 bits instead of the 64 bits of the LFSR-based Jitter RNG that is
        replaced with this patch.

        The patch also replaces the varying number of invocations of the
        conditioning function with one fixed number of invocations. The use
        of the conditioning function consistent with the userspace Jitter RNG
        library version 3.4.0.

        The code is tested with a system that exhibited the least amount of
        entropy generated by the Jitter RNG: the SiFive Unmatched RISC-V
        system. The measured entropy rate is well above the heuristically
        implied entropy value of 1 bit of entropy per time delta. On all other
        tested systems, the measured entropy rate is even higher by orders
        of magnitude. The measurement was performed using updated tooling
        provided with the user space Jitter RNG library test framework.

        The performance of the Jitter RNG with this patch is about en par
        with the performance of the Jitter RNG without the patch.

        Signed-off-by: Stephan Mueller <[email protected]>
        Signed-off-by: Herbert Xu <[email protected]>

            Back-port of commit bb897c5
            Author: Stephan Müller <[email protected]>
            Date:   Fri Apr 21 08:08:04 2023 +0200

Signed-off-by: Jeremy Allison <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
    I.G 9.7.B for FIPS 140-3 specifies that variables temporarily holding
    cryptographic information should be zeroized once they are no longer
    needed. Accomplish this by using kfree_sensitive for buffers that
    previously held the private key.

    Signed-off-by: Hailey Mothershead <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>

        Back-ported from commit 23e4099
        Author: Hailey Mothershead <[email protected]>
        Date:   Mon Apr 15 22:19:15 2024 +0000

Signed-off-by: Jeremy Allison <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
Signed-off-by: Jeremy Allison <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
private_key is overwritten with the key parameter passed in by the
caller (if present), or alternatively a newly generated private key.
However, it is possible that the caller provides a key (or the newly
generated key) which is shorter than the previous key. In that
scenario, some key material from the previous key would not be
overwritten. The easiest solution is to explicitly zeroize the entire
private_key array first.

Note that this patch slightly changes the behavior of this function:
previously, if the ecc_gen_privkey failed, the old private_key would
remain. Now, the private_key is always zeroized. This behavior is
consistent with the case where params.key is set and ecc_is_key_valid
fails.

Signed-off-by: Joachim Vandersmissen <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
[ Upstream commit ba3c557 ]

When the mpi_ec_ctx structure is initialized, some fields are not
cleared, causing a crash when referencing the field when the
structure was released. Initially, this issue was ignored because
memory for mpi_ec_ctx is allocated with the __GFP_ZERO flag.
For example, this error will be triggered when calculating the
Za value for SM2 separately.

Fixes: d58bb7e ("lib/mpi: Introduce ec implementation to MPI library")
Cc: [email protected] # v6.5
Signed-off-by: Tianjia Zhang <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
…ey() to zeroize keys on exit.

converting ws

Signed-off-by: Jonathan Maple <[email protected]>
None of the ciphers used by the DRBG have an alignment requirement; thus,
they all return 0 from .crypto_init, resulting in inconsistent alignment
across all buffers.

Align all buffers to at least a cache line to improve performance. This is
especially useful when multiple DRBG instances are used, since it prevents
false sharing of cache lines between the different instances.

Signed-off-by: Sultan Alsawaf <[email protected]>

Signed-off-by: Jonathan Maple <[email protected]>
Like pin_user_pages_fast(), but with the internal-only FOLL_FAST_ONLY flag.

This complements the get_user_pages*() API, which already has
get_user_pages_fast_only().

Signed-off-by: Sultan Alsawaf <[email protected]>

Signed-off-by: Jonathan Maple <[email protected]>
There is no reason this refcount should be a signed int. Convert it to an
unsigned int, thereby also making it less likely to ever overflow.

Signed-off-by: Sultan Alsawaf <[email protected]>

Signed-off-by: Jonathan Maple <[email protected]>
Since crypto_devrandom_read_iter() is invoked directly by user tasks and is
accessible by every task in the system, there are glaring priority
inversions on crypto_reseed_rng_lock and crypto_default_rng_lock.

Tasks of arbitrary scheduling priority access crypto_devrandom_read_iter().
When a low-priority task owns one of the mutex locks, higher-priority tasks
waiting on that mutex lock are stalled until the low-priority task is done.

Fix the priority inversions by converting the mutex locks into rt_mutex
locks which have PI support.

Signed-off-by: Sultan Alsawaf <[email protected]>

Signed-off-by: Jonathan Maple <[email protected]>
When the kernel is booted with fips=1, the RNG exposed to userspace is
hijacked away from the CRNG and redirects to crypto_devrandom_read_iter(),
which utilizes the DRBG.

Notably, crypto_devrandom_read_iter() maintains just two global DRBG
instances _for the entire system_, and the two instances serve separate
request types: one instance for GRND_RANDOM requests (crypto_reseed_rng),
and one instance for non-GRND_RANDOM requests (crypto_default_rng). So in
essence, for requests of a single type, there is just one global RNG for
all CPUs in the entire system, which scales _very_ poorly.

To make matters worse, the temporary buffer used to ferry data between the
DRBG and userspace is woefully small at only 256 bytes, which doesn't do a
good job of maximizing throughput from the DRBG. This results in lost
performance when userspace requests >256 bytes; it is observed that DRBG
throughput improves by 70% on an i9-13900H when the buffer size is
increased to 4096 bytes (one page). Going beyond the size of one page up to
the DRBG maximum request limit of 65536 bytes produces diminishing returns
of only 3% improved throughput in comparison. And going below the size of
one page produces progressively less throughput at each power of 2: there's
a 5% loss going from 4096 bytes to 2048 bytes and a 9% loss going from 2048
bytes to 1024 bytes.

Thus, this implements per-CPU DRBG instances utilizing a page-sized buffer
for each CPU to utilize the DRBG itself more effectively. On top of that,
for non-GRND_RANDOM requests, the DRBG's operations now occur under a local
lock that disables preemption on non-PREEMPT_RT kernels, which not only
keeps each CPU's DRBG instance isolated from another, but also improves
temporal cache locality while the DRBG actively generates a new string of
random bytes.

Prefaulting one user destination page at a time is also employed to prevent
a DRBG instance from getting blocked on page faults, thereby maximizing the
use of the DRBG so that the only bottleneck is the DRBG itself.

Signed-off-by: Sultan Alsawaf <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
Copy link

@thefossguy-ciq thefossguy-ciq left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see any merge conflicts. Nice work RedHat :P
🚤

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

7 participants