Message ID | 1391596792-21482-1-git-send-email-luis.henriques@canonical.com |
---|---|
State | New |
Headers | show |
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@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@redhat.com> > Signed-off-by: Matt Turner <mattst88@gmail.com> > Signed-off-by: Luis Henriques <luis.henriques@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 >
Hi Mikulas, On Mon, Feb 17, 2014 at 12:36:23PM -0500, Mikulas Patocka wrote: > Hi > > That patch is needed on 3.12 and 3.13, you don't need to backport it to > older kernels. > > Mikulas > Thank you for your review. I have dropped this patch from the 3.11 kernel before releasing it (I saw discussion regarding this patch in the 3.12 stable kernel). Unfortunately, it looks like I forgot to do the same for the 3.5 kernel and version 3.5.7.30 has been released with this patch. I will revert it for the next release (unless you believe this patch is harmless in this kernel, and there's not need to revert it). Cheers, -- Luís > > 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@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@redhat.com> > > Signed-off-by: Matt Turner <mattst88@gmail.com> > > Signed-off-by: Luis Henriques <luis.henriques@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 > >
On Tue, 18 Feb 2014, Luis Henriques wrote: > Hi Mikulas, > > On Mon, Feb 17, 2014 at 12:36:23PM -0500, Mikulas Patocka wrote: > > Hi > > > > That patch is needed on 3.12 and 3.13, you don't need to backport it to > > older kernels. > > > > Mikulas > > > > Thank you for your review. I have dropped this patch from the 3.11 kernel > before releasing it (I saw discussion regarding this patch in the 3.12 > stable kernel). > > Unfortunately, it looks like I forgot to do the same for the 3.5 kernel and > version 3.5.7.30 has been released with this patch. I will revert it for > the next release (unless you believe this patch is harmless in this > kernel, and there's not need to revert it). > > Cheers, > -- > Luís The patch is harmless on kernels <= 3.11. But it's not needed there. Mikulas
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; }