On Tue, Jul 9, 2019 at 8:25 AM Greg Rose <gvrose8...@gmail.com> wrote: > > Upstream commit: > commit 0e3183cd2a64843a95b62f8bd4a83605a4cf0615 > Author: John Hurley <john.hur...@netronome.com> > Date: Thu Jun 27 14:37:30 2019 +0100 > > net: openvswitch: fix csum updates for MPLS actions > > Skbs may have their checksum value populated by HW. If this is a checksum > calculated over the entire packet then the CHECKSUM_COMPLETE field is > marked. Changes to the data pointer on the skb throughout the network > stack still try to maintain this complete csum value if it is required > through functions such as skb_postpush_rcsum. > > The MPLS actions in Open vSwitch modify a CHECKSUM_COMPLETE value when > changes are made to packet data without a push or a pull. This occurs when > the ethertype of the MAC header is changed or when MPLS lse fields are > modified. > > The modification is carried out using the csum_partial function to get the > csum of a buffer and add it into the larger checksum. The buffer is an > inversion of the data to be removed followed by the new data. Because the > csum is calculated over 16 bits and these values align with 16 bits, the > effect is the removal of the old value from the CHECKSUM_COMPLETE and > addition of the new value. > > However, the csum fed into the function and the outcome of the > calculation are also inverted. This would only make sense if it was the > new value rather than the old that was inverted in the input buffer. > > Fix the issue by removing the bit inverts in the csum_partial calculation. > > The bug was verified and the fix tested by comparing the folded value of > the updated CHECKSUM_COMPLETE value with the folded value of a full > software checksum calculation (reset skb->csum to 0 and run > skb_checksum_complete(skb)). Prior to the fix the outcomes differed but > after they produce the same result. > > Fixes: 25cd9ba0abc0 ("openvswitch: Add basic MPLS support to kernel") > Fixes: bc7cc5999fd3 ("openvswitch: update checksum in {push,pop}_mpls") > Signed-off-by: John Hurley <john.hur...@netronome.com> > Reviewed-by: Jakub Kicinski <jakub.kicin...@netronome.com> > Reviewed-by: Simon Horman <simon.hor...@netronome.com> > Acked-by: Pravin B Shelar <pshe...@ovn.org> > Signed-off-by: David S. Miller <da...@davemloft.net> > > Fixes: ccf4378615e9 ("datapath: Add basic MPLS support to kernel") > Fixes: b51367aad315 ("datapath: update checksum in {push,pop}_mpls") > Cc: John Hurley <john.hur...@netronome.com> > Signed-off-by: Greg Rose <gvrose8...@gmail.com> > ---
LGTM Acked-by: William Tu <u9012...@gmail.com> _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev