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~} <[email protected]>
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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to