From: Greg Kroah-Hartman Date: Thu, 22 Sep 2016 13:45:44 +0000 (+0200) Subject: 4.7-stable patches X-Git-Tag: v4.4.22~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=98cdafc5af70a41c7dd185b1513ce06b11dc9d67;p=thirdparty%2Fkernel%2Fstable-queue.git 4.7-stable patches added patches: powerpc-32-fix-again-csum_partial_copy_generic.patch powerpc-32-fix-csum_partial_copy_generic.patch --- diff --git a/queue-4.7/dm-log-writes-move-io-accounting-earlier-to-fix-error-path.patch b/queue-4.7/dm-log-writes-move-io-accounting-earlier-to-fix-error-path.patch index 98dd138bf5b..bb85b81e5b2 100644 --- a/queue-4.7/dm-log-writes-move-io-accounting-earlier-to-fix-error-path.patch +++ b/queue-4.7/dm-log-writes-move-io-accounting-earlier-to-fix-error-path.patch @@ -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 -Reviewed-by: Josef Bacik +Reviewed-by: Josef Bacik Signed-off-by: Mike Snitzer Signed-off-by: Greg Kroah-Hartman 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 index 00000000000..12a55e20587 --- /dev/null +++ b/queue-4.7/powerpc-32-fix-again-csum_partial_copy_generic.patch @@ -0,0 +1,54 @@ +From 8540571e01f973d321b0821f4f32ed6e9ae8263c Mon Sep 17 00:00:00 2001 +From: Christophe Leroy +Date: Fri, 26 Aug 2016 16:45:13 +0200 +Subject: powerpc/32: Fix again csum_partial_copy_generic() + +From: Christophe Leroy + +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 +Signed-off-by: Christophe Leroy +Tested-by: Alessio Igor Bogani +Signed-off-by: Michael Ellerman +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..05c488b3aca --- /dev/null +++ b/queue-4.7/powerpc-32-fix-csum_partial_copy_generic.patch @@ -0,0 +1,50 @@ +From 1bc8b816cb8058c31f61fe78442f10a43209e582 Mon Sep 17 00:00:00 2001 +From: Christophe Leroy +Date: Tue, 2 Aug 2016 10:07:05 +0200 +Subject: powerpc/32: Fix csum_partial_copy_generic() + +From: Christophe Leroy + +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 +Signed-off-by: Michael Ellerman +Signed-off-by: Greg Kroah-Hartman + +--- + 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 */ diff --git a/queue-4.7/series b/queue-4.7/series index c3ead99d5d5..bc0eadb9378 100644 --- a/queue-4.7/series +++ b/queue-4.7/series @@ -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