]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.12-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 4 Feb 2014 17:46:47 +0000 (09:46 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 4 Feb 2014 17:46:47 +0000 (09:46 -0800)
added patches:
alpha-fix-broken-network-checksum.patch

queue-3.12/alpha-fix-broken-network-checksum.patch [new file with mode: 0644]
queue-3.12/series

diff --git a/queue-3.12/alpha-fix-broken-network-checksum.patch b/queue-3.12/alpha-fix-broken-network-checksum.patch
new file mode 100644 (file)
index 0000000..ef7e71f
--- /dev/null
@@ -0,0 +1,50 @@
+From 0ef38d70d4118b2ce1a538d14357be5ff9dc2bbd Mon Sep 17 00:00:00 2001
+From: Mikulas Patocka <mpatocka@redhat.com>
+Date: Wed, 22 Jan 2014 23:04:33 -0500
+Subject: alpha: fix broken network checksum
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+commit 0ef38d70d4118b2ce1a538d14357be5ff9dc2bbd upstream.
+
+The patch 3ddc5b46a8e90f3c9251338b60191d0a804b0d92 breaks networking on
+alpha (there is a follow-up fix 5cfe8f1ba5eebe6f4b6e5858cdb1a5be4f3272a6,
+but networking is still broken even with the second patch).
+
+The patch 3ddc5b46a8e90f3c9251338b60191d0a804b0d92 makes
+csum_partial_copy_from_user check the pointer with access_ok. However,
+csum_partial_copy_from_user is called also from csum_partial_copy_nocheck
+and csum_partial_copy_nocheck is called on kernel pointers and it is
+supposed not to check pointer validity.
+
+This bug results in ssh session hangs if the system is loaded and bulk
+data are printed to ssh terminal.
+
+This patch fixes csum_partial_copy_nocheck to call set_fs(KERNEL_DS), so
+that access_ok in csum_partial_copy_from_user accepts kernel-space
+addresses.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Matt Turner <mattst88@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/alpha/lib/csum_partial_copy.c |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+--- a/arch/alpha/lib/csum_partial_copy.c
++++ b/arch/alpha/lib/csum_partial_copy.c
+@@ -378,6 +378,11 @@ csum_partial_copy_from_user(const void _
+ __wsum
+ csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum)
+ {
+-      return csum_partial_copy_from_user((__force const void __user *)src,
+-                      dst, len, sum, NULL);
++      __wsum checksum;
++      mm_segment_t oldfs = get_fs();
++      set_fs(KERNEL_DS);
++      checksum = csum_partial_copy_from_user((__force const void __user *)src,
++                                              dst, len, sum, NULL);
++      set_fs(oldfs);
++      return checksum;
+ }
index 2be6bb95dd863a658eb51fd833dcb85adc023272..8995bcc3e5b49cfc640989b9db806310894f04b6 100644 (file)
@@ -114,3 +114,4 @@ net-fix-memory-leak-if-tproxy-used-with-tcp-early-demux.patch
 xen-netfront-fix-resource-leak-in-netfront.patch
 net-gre-use-icmp_hdr-to-get-inner-ip-header.patch
 inet_diag-fix-inet_diag_dump_icsk-timewait-socket-state-logic.patch
+alpha-fix-broken-network-checksum.patch