crypto: talitos - Prevent panic in probe error path
authorAaron Sierra <asierra@xes-inc.com>
Wed, 5 Aug 2015 21:52:08 +0000 (16:52 -0500)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 10 Aug 2015 15:19:05 +0000 (23:19 +0800)
commit35a3bb3d39d5a84b1adc02e5289d01a33d1073b6
treeb5cf6032c6c886a512433d50fae0a3ba8312c9ca
parentab86ca0755eccfdb0b2ffa3fe17cb41a6e61848b
crypto: talitos - Prevent panic in probe error path

The probe error path for this driver, for all intents and purposes,
is the talitos_remove() function due to the common "goto err_out".

Without this patch applied, talitos_remove() will panic under these
two conditions:

1. If the RNG device hasn't been registered via
   talitos_register_rng() prior to entry into talitos_remove(),
   then the attempt to unregister the RNG "device" will cause a panic.

2. If the priv->chan array has not been allocated prior to entry
   into talitos_remove(), then the per-channel FIFO cleanup will panic
   because of the dereference of that NULL "array".

Both of the above scenarios occur if talitos_probe_irq() fails.

This patch resolves issue #1 by introducing a boolean to mask the
hwrng_unregister() call in talitos_unregister_rng() if RNG device
registration was unsuccessful.

It resolves issue #2 by checking that priv->chan is not NULL in the
per-channel FIFO cleanup for loop.

Signed-off-by: Aaron Sierra <asierra@xes-inc.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/talitos.c
drivers/crypto/talitos.h