HomeFreeBSD

random(4): Make entropy source deregistration safe

Description

random(4): Make entropy source deregistration safe

Allow loadable modules that provide random entropy source(s) to safely
unload. Prior to this change, no driver could ensure that their
random_source structure was not being used by random_harvestq.c for any
period of time after invoking random_source_deregister().

This change converts the source_list LIST to a ConcurrencyKit CK_LIST and
uses an epoch(9) to protect typical read accesses of the list. The existing
HARVEST_LOCK spin mutex is used to safely add and remove list entries.
random_source_deregister() uses epoch_wait() to ensure no concurrent
source_list readers are accessing a random_source before freeing the list
item and returning to the caller.

Callers can safely unload immediately after random_source_deregister()
returns.

(cherry picked from commit 374c99911ee45c5d2ddd42bc6bcf711a8a66b07e)

Details

Provenance
cemAuthored on Dec 30 2019, 1:38 AM
obrienCommitted on Feb 22 2022, 6:20 AM
Parents
rGc4756f4a7abd: Add explicit SI_SUB_EPOCH
Branches
Unknown
Tags
Unknown