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.baronescu@xxxxxxx> > --- > 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 <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt