On 12 May 2017 at 12:22, PrasannaKumar Muralidharan
<[email protected]> wrote:
> On 12 May 2017 at 12:11, Mike Frysinger <[email protected]> wrote:
>> On Fri, May 12, 2017 at 2:15 AM, PrasannaKumar Muralidharan wrote:
>>> On 12 May 2017 at 09:47, Mike Frysinger <[email protected]> wrote:
>>> > From: Mike Frysinger <[email protected]>
>>> >
>>> > If you build in hwrng & tpm-rng, but boot on a system that doesn't
>>> > have a tpm (like via KVM), hwrng will spam the logs every 10 seconds
>>> > with the line:
>>> > hwrng: no data available
>>> >
>>> > This isn't terribly useful, so squelch the error in the ENODEV case.
>>> > For all other errors, we still warn, and include the actual error.
>
> If the boot system does not have a tpm I think registering tpm-rng is
> not useful. On tpm-rng load instead of registering with hwrng a check
> can be made whether the system supports tpm. Is this possible?
Completely untested patch below. Will something like this work?
diff --git a/drivers/char/hw_random/tpm-rng.c b/drivers/char/hw_random/tpm-rng.c
index d6d4482..f78f8ca 100644
--- a/drivers/char/hw_random/tpm-rng.c
+++ b/drivers/char/hw_random/tpm-rng.c
@@ -35,7 +35,13 @@ static int tpm_rng_read(struct hwrng *rng, void
*data, size_t max, bool wait)
static int __init rng_init(void)
{
- return hwrng_register(&tpm_rng);
+ struct tpm_chip *tpm_rng_chip = tpm_chip_find_get(TPM_ANY_NUM);
+ if (tpm_chip) {
+ tpm_put_ops(tpm_rng_chip);
+ return hwrng_register(&tpm_rng);
+ }
+
+ return -ENODEV;
}
module_init(rng_init);
Thanks,
PrasannaKumar