On 10/15/26 2:47 PM, Fernando Fernandez Mancera wrote:
> The SCTP checksum is a CRC32c over the whole SCTP packet. set_sctp()
> updates it as old_csum ^ old_correct_csum ^ new_csum, with the two CRCs
> computed over the bytes of the current skb only. That is correct only
> when the skb holds the whole SCTP packet. For a first fragment, and for
> a later fragment, it holds just a part of it, and the CRC delta of a
> change at the start of the packet depends on how many bytes follow, so
> the checksum written is wrong. The receiver drops the reassembled
> packet.
> 
> validate_set() accepts SCTP set action for any flow with ip.proto set to
> SCTP, regardless of the fragmentation bits, as it only receives the
> masked key. As the checksum cannot be fixed up without the whole
> datagram, fail the action for packets that are IP fragments of either
> family, so the packet is dropped with OVS_DROP_ACTION_ERROR instead of
> being forwarded with modified ports and an invalid checksum.
> 
> Link: 
> https://lore.kernel.org/netdev/[email protected]/
> Fixes: a175a723301a ("openvswitch: Add SCTP support")
> Signed-off-by: Fernando Fernandez Mancera <[email protected]>
> ---
>  net/openvswitch/actions.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
> index 4aade471afc4..12e339cbf791 100644
> --- a/net/openvswitch/actions.c
> +++ b/net/openvswitch/actions.c
> @@ -674,6 +674,9 @@ static int set_sctp(struct sk_buff *skb, struct 
> sw_flow_key *flow_key,
>       __le32 old_correct_csum, new_csum, old_csum;
>       int err;
>  
> +     if (flow_key->ip.frag != OVS_FRAG_TYPE_NONE)
> +             return -EINVAL;
> +
>       err = skb_ensure_writable(skb, sctphoff + sizeof(struct sctphdr));
>       if (unlikely(err))
>               return err;

Similar story here as with the previous patch.

Reviewed-by: Ilya Maximets <[email protected]>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to