Message ID | 1462781358-22163-1-git-send-email-talatb@mellanox.com |
---|---|
State | New |
Headers | show |
cherry-pick from linux-next
On Mon, May 09, 2016 at 11:09:18AM +0300, Talat Batheesh wrote: > From: Daniel Jurgens <danielj@mellanox.com> > > BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1544978 > > Use htons instead of unconditionally byte swapping nexthdr. On a little > endian systems shifting the byte is correct behavior, but it results in > incorrect csums on big endian architectures. > > Fixes: f8c6455bb04b ('net/mlx4_en: Extend checksum offloading by CHECKSUM COMPLETE') > Signed-off-by: Daniel Jurgens <danielj@mellanox.com> > Reviewed-by: Carol Soto <clsoto@us.ibm.com> > Tested-by: Carol Soto <clsoto@us.ibm.com> > Signed-off-by: Tariq Toukan <tariqt@mellanox.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > (cherry picked from commit 82d69203df634b4dfa765c94f60ce9482bcc44d6) Amend this to include where it was cherry-picked from. Other than that ACK. --chris > Signed-off-by: Talat Batheesh <talatb@mellanox.com> > --- > drivers/net/ethernet/mellanox/mlx4/en_rx.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c > index e7a5000..bbff8ec 100644 > --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c > +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c > @@ -704,7 +704,7 @@ static int get_fixed_ipv6_csum(__wsum hw_checksum, struct sk_buff *skb, > > if (ipv6h->nexthdr == IPPROTO_FRAGMENT || ipv6h->nexthdr == IPPROTO_HOPOPTS) > return -1; > - hw_checksum = csum_add(hw_checksum, (__force __wsum)(ipv6h->nexthdr << 8)); > + hw_checksum = csum_add(hw_checksum, (__force __wsum)htons(ipv6h->nexthdr)); > > csum_pseudo_hdr = csum_partial(&ipv6h->saddr, > sizeof(ipv6h->saddr) + sizeof(ipv6h->daddr), 0); > -- > 2.5.0 > > > -- > kernel-team mailing list > kernel-team@lists.ubuntu.com > https://lists.ubuntu.com/mailman/listinfo/kernel-team
Cherry-picked from net tree. Yours, Talat -----Original Message----- From: Christopher Arges [mailto:chris.j.arges@canonical.com] Sent: Monday, May 09, 2016 6:28 PM To: Talat Batheesh <talatb@mellanox.com> Cc: kernel-team@lists.ubuntu.com; Shani Michaeli <shanim@mellanox.com> Subject: Re: [PATCH] [xenial] [PATCH] (upstream) net/mlx4_en: Fix endianness bug in IPV6 csum calculation On Mon, May 09, 2016 at 11:09:18AM +0300, Talat Batheesh wrote: > From: Daniel Jurgens <danielj@mellanox.com> > > BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1544978 > > Use htons instead of unconditionally byte swapping nexthdr. On a > little endian systems shifting the byte is correct behavior, but it > results in incorrect csums on big endian architectures. > > Fixes: f8c6455bb04b ('net/mlx4_en: Extend checksum offloading by > CHECKSUM COMPLETE') > Signed-off-by: Daniel Jurgens <danielj@mellanox.com> > Reviewed-by: Carol Soto <clsoto@us.ibm.com> > Tested-by: Carol Soto <clsoto@us.ibm.com> > Signed-off-by: Tariq Toukan <tariqt@mellanox.com> > Signed-off-by: David S. Miller <davem@davemloft.net> (cherry picked > from commit 82d69203df634b4dfa765c94f60ce9482bcc44d6) Amend this to include where it was cherry-picked from. Other than that ACK. --chris > Signed-off-by: Talat Batheesh <talatb@mellanox.com> > --- > drivers/net/ethernet/mellanox/mlx4/en_rx.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c > b/drivers/net/ethernet/mellanox/mlx4/en_rx.c > index e7a5000..bbff8ec 100644 > --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c > +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c > @@ -704,7 +704,7 @@ static int get_fixed_ipv6_csum(__wsum hw_checksum, > struct sk_buff *skb, > > if (ipv6h->nexthdr == IPPROTO_FRAGMENT || ipv6h->nexthdr == IPPROTO_HOPOPTS) > return -1; > - hw_checksum = csum_add(hw_checksum, (__force __wsum)(ipv6h->nexthdr << 8)); > + hw_checksum = csum_add(hw_checksum, (__force > +__wsum)htons(ipv6h->nexthdr)); > > csum_pseudo_hdr = csum_partial(&ipv6h->saddr, > sizeof(ipv6h->saddr) + sizeof(ipv6h->daddr), 0); > -- > 2.5.0 > > > -- > kernel-team mailing list > kernel-team@lists.ubuntu.com > https://lists.ubuntu.com/mailman/listinfo/kernel-team
Applied to Xenial. (This commit has also landed in mainline now, so the cherry-pick line was actually fine just as it was). 82d6920 net/mlx4_en: Fix endianness bug in IPV6 csum calculation -Kamal
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index e7a5000..bbff8ec 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c @@ -704,7 +704,7 @@ static int get_fixed_ipv6_csum(__wsum hw_checksum, struct sk_buff *skb, if (ipv6h->nexthdr == IPPROTO_FRAGMENT || ipv6h->nexthdr == IPPROTO_HOPOPTS) return -1; - hw_checksum = csum_add(hw_checksum, (__force __wsum)(ipv6h->nexthdr << 8)); + hw_checksum = csum_add(hw_checksum, (__force __wsum)htons(ipv6h->nexthdr)); csum_pseudo_hdr = csum_partial(&ipv6h->saddr, sizeof(ipv6h->saddr) + sizeof(ipv6h->daddr), 0);