On Thu, 28 May 2020 11:36:14 -0700 Ronak Doshi wrote:
> @@ -1168,13 +1220,21 @@ vmxnet3_rx_csum(struct vmxnet3_adapter *adapter,
>                   (le32_to_cpu(gdesc->dword[3]) &
>                    VMXNET3_RCD_CSUM_OK) == VMXNET3_RCD_CSUM_OK) {
>                       skb->ip_summed = CHECKSUM_UNNECESSARY;
> -                     BUG_ON(!(gdesc->rcd.tcp || gdesc->rcd.udp));
> -                     BUG_ON(gdesc->rcd.frg);
> +                     BUG_ON(!(gdesc->rcd.tcp || gdesc->rcd.udp) &&
> +                            !(le32_to_cpu(gdesc->dword[0]) &
> +                              (1UL << VMXNET3_RCD_HDR_INNER_SHIFT)));
> +                     BUG_ON(gdesc->rcd.frg &&
> +                            !(le32_to_cpu(gdesc->dword[0]) &
> +                              (1UL << VMXNET3_RCD_HDR_INNER_SHIFT)));
>               } else if (gdesc->rcd.v6 && (le32_to_cpu(gdesc->dword[3]) &
>                                            (1 << VMXNET3_RCD_TUC_SHIFT))) {
>                       skb->ip_summed = CHECKSUM_UNNECESSARY;
> -                     BUG_ON(!(gdesc->rcd.tcp || gdesc->rcd.udp));
> -                     BUG_ON(gdesc->rcd.frg);
> +                     BUG_ON(!(gdesc->rcd.tcp || gdesc->rcd.udp) &&
> +                            !(le32_to_cpu(gdesc->dword[0]) &
> +                              (1UL << VMXNET3_RCD_HDR_INNER_SHIFT)));
> +                     BUG_ON(gdesc->rcd.frg &&
> +                            !(le32_to_cpu(gdesc->dword[0]) &
> +                              (1UL << VMXNET3_RCD_HDR_INNER_SHIFT)));
>               } else {
>                       if (gdesc->rcd.csum) {
>                               skb->csum = htons(gdesc->rcd.csum);

Seems fairly extreme to trigger BUG_ONs if rx descriptor doesn't
contain valid checksum offload flags :S WARN_ON_ONCE() and ignore 
checsum or drop packet would be more than sufficient.

Reply via email to