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.

Reviewed by: markj
Approved by: csprng(markm)
Discussed with: jhb
Differential Revision: https://reviews.freebsd.org/D22489

Details

Provenance
cemAuthored on
Reviewer
markj
Differential Revision
D22489: random(4): Make entropy source deregistration safe
Parents
rS356193: MFC r356039:
Branches
Unknown
Tags
Unknown