]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
random(4): Fix RANDOM_LOADABLE build
authorcem <cem@FreeBSD.org>
Sat, 1 Jun 2019 01:22:21 +0000 (01:22 +0000)
committercem <cem@FreeBSD.org>
Sat, 1 Jun 2019 01:22:21 +0000 (01:22 +0000)
commit6c2aef9fc0934e2a84350230ad17716b31ce47e8
tree9e7a860515fa87c7a4042d2dd0ae4f7342242a7c
parent2494b9e5deb945d1f6912aef80c7a1192cac3785
random(4): Fix RANDOM_LOADABLE build

I introduced an obvious compiler error in r346282, so this change fixes
that.

Unfortunately, RANDOM_LOADABLE isn't covered by our existing tinderbox, and
it seems like there were existing latent linking problems.  I believe these
were introduced on accident in r338324 during reduction of the boolean
expression(s) adjacent to randomdev.c and hash.c.  It seems the
RANDOM_LOADABLE build breakage has gone unnoticed for nine months.

This change correctly annotates randomdev.c and hash.c with !random_loadable
to match the pre-r338324 logic; and additionally updates the HWRNG drivers
in MD 'files.*', which depend on random_device symbols, with
!random_loadable (it is invalid for the kernel to depend on symbols from a
module).

(The expression for both randomdev.c and hash.c was the same, prior to
r338324: "optional random random_yarrow | random !random_yarrow
!random_loadable".  I.e., "random && (yarrow || !loadable)."  When Yarrow
was removed ("yarrow := False"), the expression was incorrectly reduced to
"optional random" when it should have retained "random && !loadable".)

Additionally, I discovered that virtio_random was missing a MODULE_DEPEND on
random_device, which breaks kld load/link of the driver on RANDOM_LOADABLE
kernels.  Address that issue as well.

PR: 238223
Reported by: Eir Nym <eirnym AT gmail.com>
Reviewed by: delphij, markm
Approved by: secteam(delphij)
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D20466
sys/conf/files
sys/conf/files.amd64
sys/conf/files.arm64
sys/conf/files.i386
sys/conf/files.powerpc
sys/dev/random/random_infra.c
sys/dev/virtio/random/virtio_random.c