[3.5.y.z extended stable] Patch "alpha: fix broken network checksum" has been added to staging queue

Mikulas Patocka mpatocka at redhat.com
Mon Feb 17 17:36:23 UTC 2014


Hi

That patch is needed on 3.12 and 3.13, you don't need to backport it to 
older kernels.

Mikulas


On Wed, 5 Feb 2014, Luis Henriques wrote:

> This is a note to let you know that I have just added a patch titled
> 
>     alpha: fix broken network checksum
> 
> to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
> which can be found at:
> 
>  http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.5.y-queue
> 
> If you, or anyone else, feels it should not be added to this tree, please 
> reply to this email.
> 
> For more information about the 3.5.y.z tree, see
> https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable
> 
> Thanks.
> -Luis
> 
> ------
> 
> >From 2b74e10f940d5f100a157fe0c53d31675fbc4625 Mon Sep 17 00:00:00 2001
> From: Mikulas Patocka <mpatocka at redhat.com>
> Date: Wed, 22 Jan 2014 23:04:33 -0500
> Subject: alpha: fix broken network checksum
> 
> 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 at redhat.com>
> Signed-off-by: Matt Turner <mattst88 at gmail.com>
> Signed-off-by: Luis Henriques <luis.henriques at canonical.com>
> ---
>  arch/alpha/lib/csum_partial_copy.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/alpha/lib/csum_partial_copy.c b/arch/alpha/lib/csum_partial_copy.c
> index 40736da..1d2ef5a 100644
> --- a/arch/alpha/lib/csum_partial_copy.c
> +++ b/arch/alpha/lib/csum_partial_copy.c
> @@ -373,6 +373,11 @@ csum_partial_copy_from_user(const void __user *src, void *dst, int len,
>  __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;
>  }
> --
> 1.8.3.2
> 




More information about the kernel-team mailing list