On Mon, May 17, 2010 at 10:22:37PM -0700, David Miller wrote: > > We are done with the scattergather entry when the walk offset goes > past sg->offset + sg->length, not when it crosses a page boundary. Thanks for catching this! > There is a similarly queer test in the second half of > scatterwalk_pagedone() that probably needs some scrutiny. I double-checked that one but can't see any problems yet. > diff --git a/crypto/scatterwalk.c b/crypto/scatterwalk.c > index 3de89a4..b3acf4f 100644 > --- a/crypto/scatterwalk.c > +++ b/crypto/scatterwalk.c > @@ -68,7 +68,7 @@ static void scatterwalk_pagedone(struct scatter_walk *walk, int out, > > void scatterwalk_done(struct scatter_walk *walk, int out, int more) > { > - if (!offset_in_page(walk->offset) || !more) > + if (walk->offset >= walk->sg->offset + walk->sg->length || !more) > scatterwalk_pagedone(walk, out, more); I think we need to keep the original test as well as otherwise if we hit a page boundary while the sg spans over a page (that can happen with a linearised jumbo skb->head for example) then we'd be screwed. So I'm going to commit this patch instead. Let me know if you see any other issues with it. diff --git a/crypto/scatterwalk.c b/crypto/scatterwalk.c index 3de89a4..41e529a 100644 --- a/crypto/scatterwalk.c +++ b/crypto/scatterwalk.c @@ -68,7 +68,7 @@ static void scatterwalk_pagedone(struct scatter_walk *walk, int out, void scatterwalk_done(struct scatter_walk *walk, int out, int more) { - if (!offset_in_page(walk->offset) || !more) + if (!(scatterwalk_pagelen(walk) & (PAGE_SIZE - 1)) || !more) scatterwalk_pagedone(walk, out, more); } EXPORT_SYMBOL_GPL(scatterwalk_done); Thanks, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html