On Thu, Jul 16, 2020 at 05:40:28PM +0100, Elena Petrova wrote:
> Extending the userspace RNG interface:
>   1. adding ALG_SET_DRBG_ENTROPY setsockopt option for entropy input;
>   2. using sendmsg syscall for specifying the additional data.
> 
> Signed-off-by: Elena Petrova <lena...@google.com>

Can you add more details to the commit message?  E.g. why this is needed.

Also please use imperative tense, e.g. "Extend the userspace RNG interface".

>  static int rng_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>                      int flags)
>  {
> @@ -65,6 +80,7 @@ static int rng_recvmsg(struct socket *sock, struct msghdr 
> *msg, size_t len,
>       int genlen = 0;
>       u8 result[MAXSIZE];
>  
> +     lock_sock(sock->sk);
>       if (len == 0)
>               return 0;

This returns without unlocking the socket.

>       if (len > MAXSIZE)
> @@ -82,16 +98,45 @@ static int rng_recvmsg(struct socket *sock, struct msghdr 
> *msg, size_t len,
>        * seeding as they automatically seed. The X9.31 DRNG will return
>        * an error if it was not seeded properly.
>        */
> -     genlen = crypto_rng_get_bytes(ctx->drng, result, len);
> +     genlen = crypto_rng_generate(ctx->drng, ctx->addtl, ctx->addtl_len,
> +                                  result, len);
>       if (genlen < 0)
>               return genlen;

Likewise.

>  
>       err = memcpy_to_msg(msg, result, len);
>       memzero_explicit(result, len);
> +     rng_reset_addtl(ctx);
> +     release_sock(sock->sk);
>  
>       return err ? err : len;
>  }
>  
> +static int rng_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
> +{
> +     int err;
> +     struct alg_sock *ask = alg_sk(sock->sk);
> +     struct rng_ctx *ctx = ask->private;
> +
> +     lock_sock(sock->sk);
> +     if (len > MAXSIZE)
> +             len = MAXSIZE;
> +
> +     rng_reset_addtl(ctx);
> +     ctx->addtl = kmalloc(len, GFP_KERNEL);
> +     if (!ctx->addtl)
> +             return -ENOMEM;

Likewise.

> +
> +     err = memcpy_from_msg(ctx->addtl, msg, len);
> +     if (err) {
> +             rng_reset_addtl(ctx);
> +             return err;

Likewise.

Reply via email to