lkml.org 
[lkml]   [2020]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 387/639] crypto: ccp - Fix 3DES complaint from ccp-crypto module
    Date
    From: Hook, Gary <Gary.Hook@amd.com>

    [ Upstream commit 89646fdda4cae203185444ac7988835f36a21ee1 ]

    Crypto self-tests reveal an error:

    alg: skcipher: cbc-des3-ccp encryption test failed (wrong output IV) on test vector 0, cfg="in-place"

    The offset value should not be recomputed when retrieving the context.
    Also, a code path exists which makes decisions based on older (version 3)
    hardware; a v3 device deosn't support 3DES so remove this check.

    Fixes: 990672d48515 ('crypto: ccp - Enable 3DES function on v5 CCPs')

    Signed-off-by: Gary R Hook <gary.hook@amd.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/crypto/ccp/ccp-ops.c | 15 ++++-----------
    1 file changed, 4 insertions(+), 11 deletions(-)

    diff --git a/drivers/crypto/ccp/ccp-ops.c b/drivers/crypto/ccp/ccp-ops.c
    index 1e2e42106dee0..4b48b8523a40c 100644
    --- a/drivers/crypto/ccp/ccp-ops.c
    +++ b/drivers/crypto/ccp/ccp-ops.c
    @@ -1293,6 +1293,9 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
    int ret;

    /* Error checks */
    + if (cmd_q->ccp->vdata->version < CCP_VERSION(5, 0))
    + return -EINVAL;
    +
    if (!cmd_q->ccp->vdata->perform->des3)
    return -EINVAL;

    @@ -1375,8 +1378,6 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
    * passthru option to convert from big endian to little endian.
    */
    if (des3->mode != CCP_DES3_MODE_ECB) {
    - u32 load_mode;
    -
    op.sb_ctx = cmd_q->sb_ctx;

    ret = ccp_init_dm_workarea(&ctx, cmd_q,
    @@ -1392,12 +1393,8 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
    if (ret)
    goto e_ctx;

    - if (cmd_q->ccp->vdata->version == CCP_VERSION(3, 0))
    - load_mode = CCP_PASSTHRU_BYTESWAP_NOOP;
    - else
    - load_mode = CCP_PASSTHRU_BYTESWAP_256BIT;
    ret = ccp_copy_to_sb(cmd_q, &ctx, op.jobid, op.sb_ctx,
    - load_mode);
    + CCP_PASSTHRU_BYTESWAP_256BIT);
    if (ret) {
    cmd->engine_error = cmd_q->cmd_error;
    goto e_ctx;
    @@ -1459,10 +1456,6 @@ static int ccp_run_des3_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
    }

    /* ...but we only need the last DES3_EDE_BLOCK_SIZE bytes */
    - if (cmd_q->ccp->vdata->version == CCP_VERSION(3, 0))
    - dm_offset = CCP_SB_BYTES - des3->iv_len;
    - else
    - dm_offset = 0;
    ccp_get_dm_area(&ctx, dm_offset, des3->iv, 0,
    DES3_EDE_BLOCK_SIZE);
    }
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-01-24 12:22    [W:2.515 / U:3.416 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site