lkml.org 
[lkml]   [2017]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.10 097/167] crypto: vmx - Use skcipher for cbc fallback
    Date
    4.10-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Paulo Flabiano Smorigo <pfsmorigo@linux.vnet.ibm.com>

    commit c96d0a1c47abd5c4fa544dcedb5fac4d020ac58b upstream.

    Signed-off-by: Paulo Flabiano Smorigo <pfsmorigo@linux.vnet.ibm.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/crypto/vmx/aes_cbc.c | 47 +++++++++++++++++++++----------------------
    1 file changed, 24 insertions(+), 23 deletions(-)

    --- a/drivers/crypto/vmx/aes_cbc.c
    +++ b/drivers/crypto/vmx/aes_cbc.c
    @@ -27,11 +27,12 @@
    #include <asm/switch_to.h>
    #include <crypto/aes.h>
    #include <crypto/scatterwalk.h>
    +#include <crypto/skcipher.h>

    #include "aesp8-ppc.h"

    struct p8_aes_cbc_ctx {
    - struct crypto_blkcipher *fallback;
    + struct crypto_skcipher *fallback;
    struct aes_key enc_key;
    struct aes_key dec_key;
    };
    @@ -39,7 +40,7 @@ struct p8_aes_cbc_ctx {
    static int p8_aes_cbc_init(struct crypto_tfm *tfm)
    {
    const char *alg;
    - struct crypto_blkcipher *fallback;
    + struct crypto_skcipher *fallback;
    struct p8_aes_cbc_ctx *ctx = crypto_tfm_ctx(tfm);

    if (!(alg = crypto_tfm_alg_name(tfm))) {
    @@ -47,8 +48,9 @@ static int p8_aes_cbc_init(struct crypto
    return -ENOENT;
    }

    - fallback =
    - crypto_alloc_blkcipher(alg, 0, CRYPTO_ALG_NEED_FALLBACK);
    + fallback = crypto_alloc_skcipher(alg, 0,
    + CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK);
    +
    if (IS_ERR(fallback)) {
    printk(KERN_ERR
    "Failed to allocate transformation for '%s': %ld\n",
    @@ -56,11 +58,12 @@ static int p8_aes_cbc_init(struct crypto
    return PTR_ERR(fallback);
    }
    printk(KERN_INFO "Using '%s' as fallback implementation.\n",
    - crypto_tfm_alg_driver_name((struct crypto_tfm *) fallback));
    + crypto_skcipher_driver_name(fallback));
    +

    - crypto_blkcipher_set_flags(
    + crypto_skcipher_set_flags(
    fallback,
    - crypto_blkcipher_get_flags((struct crypto_blkcipher *)tfm));
    + crypto_skcipher_get_flags((struct crypto_skcipher *)tfm));
    ctx->fallback = fallback;

    return 0;
    @@ -71,7 +74,7 @@ static void p8_aes_cbc_exit(struct crypt
    struct p8_aes_cbc_ctx *ctx = crypto_tfm_ctx(tfm);

    if (ctx->fallback) {
    - crypto_free_blkcipher(ctx->fallback);
    + crypto_free_skcipher(ctx->fallback);
    ctx->fallback = NULL;
    }
    }
    @@ -91,7 +94,7 @@ static int p8_aes_cbc_setkey(struct cryp
    pagefault_enable();
    preempt_enable();

    - ret += crypto_blkcipher_setkey(ctx->fallback, key, keylen);
    + ret += crypto_skcipher_setkey(ctx->fallback, key, keylen);
    return ret;
    }

    @@ -103,15 +106,14 @@ static int p8_aes_cbc_encrypt(struct blk
    struct blkcipher_walk walk;
    struct p8_aes_cbc_ctx *ctx =
    crypto_tfm_ctx(crypto_blkcipher_tfm(desc->tfm));
    - struct blkcipher_desc fallback_desc = {
    - .tfm = ctx->fallback,
    - .info = desc->info,
    - .flags = desc->flags
    - };

    if (in_interrupt()) {
    - ret = crypto_blkcipher_encrypt(&fallback_desc, dst, src,
    - nbytes);
    + SKCIPHER_REQUEST_ON_STACK(req, ctx->fallback);
    + skcipher_request_set_tfm(req, ctx->fallback);
    + skcipher_request_set_callback(req, desc->flags, NULL, NULL);
    + skcipher_request_set_crypt(req, src, dst, nbytes, desc->info);
    + ret = crypto_skcipher_encrypt(req);
    + skcipher_request_zero(req);
    } else {
    preempt_disable();
    pagefault_disable();
    @@ -144,15 +146,14 @@ static int p8_aes_cbc_decrypt(struct blk
    struct blkcipher_walk walk;
    struct p8_aes_cbc_ctx *ctx =
    crypto_tfm_ctx(crypto_blkcipher_tfm(desc->tfm));
    - struct blkcipher_desc fallback_desc = {
    - .tfm = ctx->fallback,
    - .info = desc->info,
    - .flags = desc->flags
    - };

    if (in_interrupt()) {
    - ret = crypto_blkcipher_decrypt(&fallback_desc, dst, src,
    - nbytes);
    + SKCIPHER_REQUEST_ON_STACK(req, ctx->fallback);
    + skcipher_request_set_tfm(req, ctx->fallback);
    + skcipher_request_set_callback(req, desc->flags, NULL, NULL);
    + skcipher_request_set_crypt(req, src, dst, nbytes, desc->info);
    + ret = crypto_skcipher_decrypt(req);
    + skcipher_request_zero(req);
    } else {
    preempt_disable();
    pagefault_disable();

    \
     
     \ /
      Last update: 2017-03-10 10:58    [W:5.731 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site