lkml.org 
[lkml]   [2018]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] crypto: caam - fix endless loop when DECO acquire fails
    Date
    In case DECO0 cannot be acquired - i.e. run_descriptor_deco0() fails
    with -ENODEV, caam_probe() enters an endless loop:

    run_descriptor_deco0
    ret -ENODEV
    -> instantiate_rng
    -ENODEV, overwritten by -EAGAIN
    ret -EAGAIN
    -> caam_probe
    -EAGAIN results in endless loop

    It turns out the error path in instantiate_rng() is incorrect,
    the checks are done in the wrong order.

    Cc: <stable@vger.kernel.org> # 3.13+
    Fixes: 1005bccd7a4a6 ("crypto: caam - enable instantiation of all RNG4 state handles")
    Reported-by: Bryan O'Donoghue <pure.logic@nexus-software.ie>
    Suggested-by: Auer Lukas <lukas.auer@aisec.fraunhofer.de>
    Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
    ---
    drivers/crypto/caam/ctrl.c | 8 ++++++--
    1 file changed, 6 insertions(+), 2 deletions(-)

    diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c
    index 75d280cb2dc0..e843cf410373 100644
    --- a/drivers/crypto/caam/ctrl.c
    +++ b/drivers/crypto/caam/ctrl.c
    @@ -228,12 +228,16 @@ static int instantiate_rng(struct device *ctrldev, int state_handle_mask,
    * without any error (HW optimizations for later
    * CAAM eras), then try again.
    */
    + if (ret)
    + break;
    +
    rdsta_val = rd_reg32(&ctrl->r4tst[0].rdsta) & RDSTA_IFMASK;
    if ((status && status != JRSTA_SSRC_JUMP_HALT_CC) ||
    - !(rdsta_val & (1 << sh_idx)))
    + !(rdsta_val & (1 << sh_idx))) {
    ret = -EAGAIN;
    - if (ret)
    break;
    + }
    +
    dev_info(ctrldev, "Instantiated RNG4 SH%d\n", sh_idx);
    /* Clear the contents before recreating the descriptor */
    memset(desc, 0x00, CAAM_CMD_SZ * 7);
    --
    2.12.0.264.gd6db3f216544
    \
     
     \ /
      Last update: 2018-02-05 10:18    [W:2.635 / U:0.420 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site