On Tue, Oct 10, 2017 at 01:21:59PM +0300, Robert Baronescu wrote:
> In case buffer length is a multiple of PAGE_SIZE,
> the S/G table is incorrectly generated.
> Fix this by handling buflen = k * PAGE_SIZE separately.
> 
> Signed-off-by: Robert Baronescu <robert.barone...@nxp.com>
> ---
>  crypto/tcrypt.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
> index 0022a18..bd9b66c 100644
> --- a/crypto/tcrypt.c
> +++ b/crypto/tcrypt.c
> @@ -221,11 +221,13 @@ static void sg_init_aead(struct scatterlist *sg, char 
> *xbuf[XBUFSIZE],
>       }
>  
>       sg_init_table(sg, np + 1);
> -     np--;
> +     if (rem)
> +             np--;
>       for (k = 0; k < np; k++)
>               sg_set_buf(&sg[k + 1], xbuf[k], PAGE_SIZE);
>  
> -     sg_set_buf(&sg[k + 1], xbuf[k], rem);
> +     if (rem)
> +             sg_set_buf(&sg[k + 1], xbuf[k], rem);

Sorry but I think this is still buggy because you have not moved the
end-of-table marking in the rem == 0 case.

Cheers,
-- 
Email: Herbert Xu <herb...@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

Reply via email to