Am Montag, 20. April 2015, 13:39:05 schrieb Herbert Xu:

Hi Herbert,

> There is no reason why crypto_rng_reset should modify the seed
> so this patch marks it as const.  Since our algorithms don't
> export a const seed function yet we have to go through some
> contortions for now.
> 
> Signed-off-by: Herbert Xu <herb...@gondor.apana.org.au>
> ---
> 
>  crypto/rng.c         |   27 +++++++++++++++++++++++++--
>  include/crypto/rng.h |    9 +++------
>  2 files changed, 28 insertions(+), 8 deletions(-)
> 
> diff --git a/crypto/rng.c b/crypto/rng.c
> index 4514d37..618fa4d 100644
> --- a/crypto/rng.c
> +++ b/crypto/rng.c
> @@ -42,7 +42,29 @@ static int generate(struct crypto_rng *tfm, const u8
> *src, unsigned int slen, return crypto_rng_alg(tfm)->rng_make_random(tfm,
> dst, dlen);
>  }
> 
> -static int rngapi_reset(struct crypto_rng *tfm, u8 *seed, unsigned int
> slen) +static int rngapi_reset(struct crypto_rng *tfm, const u8 *seed,
> +                     unsigned int slen)
> +{
> +     u8 *buf = NULL;
> +     u8 *src = (u8 *)seed;
> +     int err;
> +
> +     if (slen) {
> +             buf = kmalloc(slen, GFP_KERNEL);
> +             if (!buf)
> +                     return -ENOMEM;
> +
> +             memcpy(buf, seed, slen);
> +             src = buf;
> +     }
> +
> +     err = crypto_rng_alg(tfm)->rng_reset(tfm, src, slen);
> +
> +     kfree(buf);

Shouldn't kzfree be here? Seed data is sensitive data.

> +     return err;
> +}
> +
> +int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed, unsigned int
> slen) {
>       u8 *buf = NULL;
>       int err;
> @@ -56,11 +78,12 @@ static int rngapi_reset(struct crypto_rng *tfm, u8
> *seed, unsigned int slen) seed = buf;
>       }
> 
> -     err = crypto_rng_alg(tfm)->rng_reset(tfm, seed, slen);
> +     err = tfm->seed(tfm, seed, slen);
> 
>       kfree(buf);
>       return err;
>  }
> +EXPORT_SYMBOL_GPL(crypto_rng_reset);
> 
>  static int crypto_rng_init_tfm(struct crypto_tfm *tfm)
>  {
> diff --git a/include/crypto/rng.h b/include/crypto/rng.h
> index f20f068..7fca371 100644
> --- a/include/crypto/rng.h
> +++ b/include/crypto/rng.h
> @@ -19,7 +19,7 @@ struct crypto_rng {
>       int (*generate)(struct crypto_rng *tfm,
>                       const u8 *src, unsigned int slen,
>                       u8 *dst, unsigned int dlen);
> -     int (*seed)(struct crypto_rng *tfm, u8 *seed, unsigned int slen);
> +     int (*seed)(struct crypto_rng *tfm, const u8 *seed, unsigned int 
slen);
>       struct crypto_tfm base;
>  };
> 
> @@ -139,11 +139,8 @@ static inline int crypto_rng_get_bytes(struct
> crypto_rng *tfm, *
>   * Return: 0 if the setting of the key was successful; < 0 if an error
> occurred */
> -static inline int crypto_rng_reset(struct crypto_rng *tfm,
> -                                u8 *seed, unsigned int slen)
> -{
> -     return tfm->seed(tfm, seed, slen);
> -}
> +int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed,
> +                  unsigned int slen);
> 
>  /**
>   * crypto_rng_seedsize() - obtain seed size of RNG
> --
> To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


-- 
Ciao
Stephan
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to