]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.7-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 Sep 2016 13:45:44 +0000 (15:45 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 Sep 2016 13:45:44 +0000 (15:45 +0200)
added patches:
powerpc-32-fix-again-csum_partial_copy_generic.patch
powerpc-32-fix-csum_partial_copy_generic.patch

queue-4.7/dm-log-writes-move-io-accounting-earlier-to-fix-error-path.patch
queue-4.7/powerpc-32-fix-again-csum_partial_copy_generic.patch [new file with mode: 0644]
queue-4.7/powerpc-32-fix-csum_partial_copy_generic.patch [new file with mode: 0644]
queue-4.7/series

index 98dd138bf5b7dd9667779bd3a1334baea61a8ed9..bb85b81e5b293354f322b8f18b6053d9b59d8bb6 100644 (file)
@@ -13,7 +13,7 @@ does put_io_block(lc), so atomic_inc(&lc->io_blocks) must occur before
 invoking the error path to avoid underflow of lc->io_blocks.
 
 Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
-Reviewed-by: Josef Bacik <jbacik@fb,com>
+Reviewed-by: Josef Bacik <jbacik@fb.com>
 Signed-off-by: Mike Snitzer <snitzer@redhat.com>
 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
diff --git a/queue-4.7/powerpc-32-fix-again-csum_partial_copy_generic.patch b/queue-4.7/powerpc-32-fix-again-csum_partial_copy_generic.patch
new file mode 100644 (file)
index 0000000..12a55e2
--- /dev/null
@@ -0,0 +1,54 @@
+From 8540571e01f973d321b0821f4f32ed6e9ae8263c Mon Sep 17 00:00:00 2001
+From: Christophe Leroy <christophe.leroy@c-s.fr>
+Date: Fri, 26 Aug 2016 16:45:13 +0200
+Subject: powerpc/32: Fix again csum_partial_copy_generic()
+
+From: Christophe Leroy <christophe.leroy@c-s.fr>
+
+commit 8540571e01f973d321b0821f4f32ed6e9ae8263c upstream.
+
+Commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()
+based on copy_tofrom_user()") introduced a bug when destination address
+is odd and len is lower than cacheline size.
+
+In that case the resulting csum value doesn't have to be rotated one
+byte because the cache-aligned copy part is skipped so no alignment
+is performed.
+
+Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic() based on copy_tofrom_user()")
+Cc: stable@vger.kernel.org # v4.6+
+Reported-by: Alessio Igor Bogani <alessio.bogani@elettra.eu>
+Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
+Tested-by: Alessio Igor Bogani <alessio.bogani@elettra.eu>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/lib/checksum_32.S |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/arch/powerpc/lib/checksum_32.S
++++ b/arch/powerpc/lib/checksum_32.S
+@@ -127,18 +127,19 @@ _GLOBAL(csum_partial_copy_generic)
+       stw     r7,12(r1)
+       stw     r8,8(r1)
+-      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
+       addi    r4,r3,-4
+       andi.   r0,r0,CACHELINE_MASK    /* # bytes to start of cache line */
++      crset   4*cr7+eq
+       beq     58f
+       cmplw   0,r5,r0                 /* is this more than total to do? */
+       blt     63f                     /* if not much to do */
++      rlwinm  r7,r6,3,0x8
++      rlwnm   r12,r12,r7,0,31 /* odd destination address: rotate one byte */
++      cmplwi  cr7,r7,0        /* is destination address even ? */
+       andi.   r8,r0,3                 /* get it word-aligned first */
+       mtctr   r8
+       beq+    61f
diff --git a/queue-4.7/powerpc-32-fix-csum_partial_copy_generic.patch b/queue-4.7/powerpc-32-fix-csum_partial_copy_generic.patch
new file mode 100644 (file)
index 0000000..05c488b
--- /dev/null
@@ -0,0 +1,50 @@
+From 1bc8b816cb8058c31f61fe78442f10a43209e582 Mon Sep 17 00:00:00 2001
+From: Christophe Leroy <christophe.leroy@c-s.fr>
+Date: Tue, 2 Aug 2016 10:07:05 +0200
+Subject: powerpc/32: Fix csum_partial_copy_generic()
+
+From: Christophe Leroy <christophe.leroy@c-s.fr>
+
+commit 1bc8b816cb8058c31f61fe78442f10a43209e582 upstream.
+
+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 <christophe.leroy@c-s.fr>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/lib/checksum_32.S |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- 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 */
index c3ead99d5d52c7aa9dff3204faa5ba935cb8ca30..bc0eadb93785deb452ffbb60293f036f10557541 100644 (file)
@@ -137,3 +137,5 @@ efi-libstub-allocate-headspace-in-efi_get_memory_map.patch
 efi-libstub-introduce-exitbootservices-helper.patch
 efi-libstub-use-efi_exit_boot_services-in-fdt.patch
 x86-efi-use-efi_exit_boot_services.patch
+powerpc-32-fix-csum_partial_copy_generic.patch
+powerpc-32-fix-again-csum_partial_copy_generic.patch