From: Greg Kroah-Hartman Date: Tue, 4 Feb 2014 17:46:50 +0000 (-0800) Subject: 3.13-stable patches X-Git-Tag: v3.4.79~1^2~21 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=afdf844885d00b38eb38a523f3c43813335d83d9;p=thirdparty%2Fkernel%2Fstable-queue.git 3.13-stable patches added patches: alpha-fix-broken-network-checksum.patch --- diff --git a/queue-3.13/alpha-fix-broken-network-checksum.patch b/queue-3.13/alpha-fix-broken-network-checksum.patch new file mode 100644 index 00000000000..ef7e71f4b4d --- /dev/null +++ b/queue-3.13/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.13/series b/queue-3.13/series index 5972b9d09a0..a0487bd336f 100644 --- a/queue-3.13/series +++ b/queue-3.13/series @@ -120,3 +120,4 @@ mmc-sdhci-add-quirk-for-broken-hs200-support.patch mmc-sdhci-pci-add-broken-hs200-quirk-for-intel-merrifield.patch mmc-sdhci-fix-lockdep-error-in-tuning-routine.patch mmc-sdhci-esdhc-imx-fix-access-hardirq-unsafe-lock-in-atomic-context.patch +alpha-fix-broken-network-checksum.patch