[PATCH v2] powerpc/32: fix csum_partial_copy_generic()

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE3658d

9 messages, 6 authors, 2016-08-10 · open the first message on its own page

[PATCH v2] powerpc/32: fix csum_partial_copy_generic()

From: Christophe Leroy <hidden>
Date: 2016-08-02 11:51:42

commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()") introduced a bug when destination
address is odd and initial csum is not null

In that (rare) case the initial csum value has to be rotated one byte
as well as the resulting value is

This patch also fixes related comments

Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()")
Cc: stable@vger.kernel.org

Signed-off-by: Christophe Leroy <redacted>
---
 v2: updated comments as suggested by Segher

 arch/powerpc/lib/checksum_32.S | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/arch/powerpc/lib/checksum_32.S b/arch/powerpc/lib/checksum_32.S
index d90870a..0a57fe6 100644
--- a/arch/powerpc/lib/checksum_32.S
+++ b/arch/powerpc/lib/checksum_32.S
@@ -127,8 +127,9 @@ _GLOBAL(csum_partial_copy_generic)
 	stw	r7,12(r1)
 	stw	r8,8(r1)
 
-	andi.	r0,r4,1			/* is destination address even ? */
-	cmplwi	cr7,r0,0
+	rlwinm	r0,r4,3,0x8
+	rlwnm	r6,r6,r0,0,31	/* odd destination address: rotate one byte */
+	cmplwi	cr7,r0,0	/* is destination address even ? */
 	addic	r12,r6,0
 	addi	r6,r4,-4
 	neg	r0,r4
@@ -237,7 +238,7 @@ _GLOBAL(csum_partial_copy_generic)
 66:	addze	r3,r12
 	addi	r1,r1,16
 	beqlr+	cr7
-	rlwinm	r3,r3,8,0,31	/* swap bytes for odd destination */
+	rlwinm	r3,r3,8,0,31	/* odd destination address: rotate one byte */
 	blr
 
 /* read fault */
-- 
2.1.0

Re: [PATCH v2] powerpc/32: fix csum_partial_copy_generic()

From: Segher Boessenkool <hidden>
Date: 2016-08-02 13:32:23

On Tue, Aug 02, 2016 at 10:07:05AM +0200, Christophe Leroy wrote:
commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()") introduced a bug when destination
address is odd and initial csum is not null

In that (rare) case the initial csum value has to be rotated one byte
as well as the resulting value is

This patch also fixes related comments

Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()")
Cc: stable@vger.kernel.org

Signed-off-by: Christophe Leroy <redacted>
---
 v2: updated comments as suggested by Segher
Thanks.  It looks good to me now.


Segher

Re: [PATCH v2] powerpc/32: fix csum_partial_copy_generic()

From: Segher Boessenkool <hidden>
Date: 2016-08-02 14:30:25

On Tue, Aug 02, 2016 at 10:07:05AM +0200, Christophe Leroy wrote:
commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()") introduced a bug when destination
address is odd and initial csum is not null

In that (rare) case the initial csum value has to be rotated one byte
as well as the resulting value is

This patch also fixes related comments

Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()")
Cc: stable@vger.kernel.org

Signed-off-by: Christophe Leroy <redacted>
---
 v2: updated comments as suggested by Segher
This looks good to me now, thanks,


Segher

Re: [PATCH v2] powerpc/32: fix csum_partial_copy_generic()

From: Scott Wood <oss@buserror.net>
Date: 2016-08-04 03:53:47

On Tue, 2016-08-02 at 10:07 +0200, Christophe Leroy wrote:
commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()") introduced a bug when destination
address is odd and initial csum is not null

In that (rare) case the initial csum value has to be rotated one byte
as well as the resulting value is

This patch also fixes related comments

Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()")
Cc: stable@vger.kernel.org

Signed-off-by: Christophe Leroy <redacted>
---
 v2: updated comments as suggested by Segher

 arch/powerpc/lib/checksum_32.S | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
Alessio, can you confirm whether this fixes the problem you reported?

-Scott
quoted hunk
diff --git a/arch/powerpc/lib/checksum_32.S b/arch/powerpc/lib/checksum_32.S
index d90870a..0a57fe6 100644
--- a/arch/powerpc/lib/checksum_32.S
+++ b/arch/powerpc/lib/checksum_32.S
@@ -127,8 +127,9 @@ _GLOBAL(csum_partial_copy_generic)
 	stw	r7,12(r1)
 	stw	r8,8(r1)
 
-	andi.	r0,r4,1			/* is destination
address even ? */
-	cmplwi	cr7,r0,0
+	rlwinm	r0,r4,3,0x8
+	rlwnm	r6,r6,r0,0,31	/* odd destination address:
rotate one byte */
+	cmplwi	cr7,r0,0	/* is destination address even ? */
 	addic	r12,r6,0
 	addi	r6,r4,-4
 	neg	r0,r4
@@ -237,7 +238,7 @@ _GLOBAL(csum_partial_copy_generic)
 66:	addze	r3,r12
 	addi	r1,r1,16
 	beqlr+	cr7
-	rlwinm	r3,r3,8,0,31	/* swap bytes for odd destination
*/
+	rlwinm	r3,r3,8,0,31	/* odd destination address:
rotate one byte */
 	blr
 
 /* read fault */

Re: [PATCH v2] powerpc/32: fix csum_partial_copy_generic()

From: Alessio Igor Bogani <hidden>
Date: 2016-08-04 06:30:57

Scott,

On 4 August 2016 at 05:53, Scott Wood [off-list ref] wrote:
On Tue, 2016-08-02 at 10:07 +0200, Christophe Leroy wrote:
quoted
commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()") introduced a bug when destination
address is odd and initial csum is not null

In that (rare) case the initial csum value has to be rotated one byte
as well as the resulting value is

This patch also fixes related comments

Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()")
Cc: stable@vger.kernel.org

Signed-off-by: Christophe Leroy <redacted>
---
 v2: updated comments as suggested by Segher

 arch/powerpc/lib/checksum_32.S | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
Alessio, can you confirm whether this fixes the problem you reported?
No unfortunately.

Ciao,
Alessio

Re: [PATCH v2] powerpc/32: fix csum_partial_copy_generic()

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2016-08-05 06:57:50

Alessio Igor Bogani [off-list ref] writes:
On 4 August 2016 at 05:53, Scott Wood [off-list ref] wrote:
quoted
On Tue, 2016-08-02 at 10:07 +0200, Christophe Leroy wrote:
quoted
commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()") introduced a bug when destination
address is odd and initial csum is not null

In that (rare) case the initial csum value has to be rotated one byte
as well as the resulting value is

This patch also fixes related comments

Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()")
Cc: stable@vger.kernel.org

Signed-off-by: Christophe Leroy <redacted>
---
 v2: updated comments as suggested by Segher

 arch/powerpc/lib/checksum_32.S | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
Alessio, can you confirm whether this fixes the problem you reported?
No unfortunately.
Thanks for testing.

I've dropped the patch for now, send me a new one that works.

cheers

Re: [PATCH v2] powerpc/32: fix csum_partial_copy_generic()

From: Christophe Leroy <hidden>
Date: 2016-08-05 07:26:47


Le 05/08/2016 à 08:57, Michael Ellerman a écrit :
Alessio Igor Bogani [off-list ref] writes:
quoted
On 4 August 2016 at 05:53, Scott Wood [off-list ref] wrote:
quoted
On Tue, 2016-08-02 at 10:07 +0200, Christophe Leroy wrote:
quoted
commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()") introduced a bug when destination
address is odd and initial csum is not null

In that (rare) case the initial csum value has to be rotated one byte
as well as the resulting value is

This patch also fixes related comments

Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()")
Cc: stable@vger.kernel.org

Signed-off-by: Christophe Leroy <redacted>
---
  v2: updated comments as suggested by Segher

  arch/powerpc/lib/checksum_32.S | 7 ++++---
  1 file changed, 4 insertions(+), 3 deletions(-)
Alessio, can you confirm whether this fixes the problem you reported?
No unfortunately.
Thanks for testing.

I've dropped the patch for now, send me a new one that works.
The purpose of this patch was not to address Alessio's issue, but to fix 
a huge issue on checksum calculation which induces breakdown of TCP 
connections.

I think it is worth commiting it upstream and on impacted stable 
releases, allthought we don't have yet identified the issue Alessio's has.

Christophe

Re: [PATCH v2] powerpc/32: fix csum_partial_copy_generic()

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2016-08-05 09:39:50

Christophe Leroy [off-list ref] writes:
Le 05/08/2016 =C3=A0 08:57, Michael Ellerman a =C3=A9crit :
quoted
Alessio Igor Bogani [off-list ref] writes:
quoted
On 4 August 2016 at 05:53, Scott Wood [off-list ref] wrote:
quoted
On Tue, 2016-08-02 at 10:07 +0200, Christophe Leroy wrote:
quoted
commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()") introduced a bug when destination
address is odd and initial csum is not null
The purpose of this patch was not to address Alessio's issue, but to fix=
=20
a huge issue on checksum calculation which induces breakdown of TCP=20
connections.

I think it is worth commiting it upstream and on impacted stable=20
releases, allthought we don't have yet identified the issue Alessio's has.
OK. I'll put it back into fixes on Monday if I haven't heard anything
further.

cheers

Re: [v2] powerpc/32: fix csum_partial_copy_generic()

From: Michael Ellerman <hidden>
Date: 2016-08-10 19:49:27

On Tue, 2016-02-08 at 08:07:05 UTC, Christophe Leroy wrote:
commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
based on copy_tofrom_user()") introduced a bug when destination
address is odd and initial csum is not null

In that (rare) case the initial csum value has to be rotated one byte
as well as the resulting value is

This patch also fixes related comments

Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic() based on copy_tofrom_user()")
Signed-off-by: Christophe Leroy <redacted>
Applied to powerpc fixes, thanks.

https://git.kernel.org/powerpc/c/1bc8b816cb8058c31f61fe7844

cheers
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help