From: Greg Kroah-Hartman Date: Tue, 4 Feb 2014 17:46:47 +0000 (-0800) Subject: 3.12-stable patches X-Git-Tag: v3.4.79~1^2~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bf1562025048952243c08709d78fcbd1061289ca;p=thirdparty%2Fkernel%2Fstable-queue.git 3.12-stable patches added patches: alpha-fix-broken-network-checksum.patch --- 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 index 00000000000..ef7e71f4b4d --- /dev/null +++ b/queue-3.12/alpha-fix-broken-network-checksum.patch @@ -0,0 +1,50 @@ +From 0ef38d70d4118b2ce1a538d14357be5ff9dc2bbd Mon Sep 17 00:00:00 2001 +From: Mikulas Patocka +Date: Wed, 22 Jan 2014 23:04:33 -0500 +Subject: alpha: fix broken network checksum + +From: Mikulas Patocka + +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 +Signed-off-by: Matt Turner +Signed-off-by: Greg Kroah-Hartman + +--- + 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; + } diff --git a/queue-3.12/series b/queue-3.12/series index 2be6bb95dd8..8995bcc3e5b 100644 --- a/queue-3.12/series +++ b/queue-3.12/series @@ -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