[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20130116.155406.351676228334066120.davem@davemloft.net>
Date: Wed, 16 Jan 2013 15:54:06 -0500 (EST)
From: David Miller <davem@...emloft.net>
To: dwmw2@...radead.org
Cc: netdev@...r.kernel.org
Subject: Re: [RFC PATCH 1/3] Avoid making inappropriate requests of
NETIF_F_V[46]_CSUM devices
From: David Woodhouse <dwmw2@...radead.org>
Date: Mon, 14 Jan 2013 12:10:31 +0000
> Devices with the NETIF_F_V[46]_CSUM feature(s) are *only* required to
> handle checksumming of UDP and TCP.
>
> In netif_skb_features() we attempt to filter out the capabilities which
> are inappropriate for the device that the skb will actually be sent
> from... but there we assume that NETIF_F_V4_CSUM devices can handle
> *all* Legacy IP, and that NETIF_F_V6_CSUM devices can handle *all* IPv6.
>
> This may have been OK in the days when CHECKSUM_PARTIAL packets would
> *only* be produced by the local stack, and we knew the local stack
> didn't generate them for anything but UDP and TCP. But these days that's
> not true. When a tun device receives a packet from userspace with
> VIRTIO_NET_HDR_F_NEEDS_CSUM, that translates fairly directly into
> setting CHECKSUM_PARTIAL on the resulting skb. Since virtio_net
> advertises NETIF_F_HW_CSUM to its guests, we should expect to be asked
> to checksum *anything*.
My opinion on this is that the injectors of packets are responsible
for ensuring checksum types are set on SKBs in an appropriate way.
So we ensure this in the local protocol stacks that generate packets,
and if foreign alien entities can inject SKBs with these checksum
settings (like the tun device can) the burdon of verification falls
upon whatever layer allows that to happen.
So really, the fix is in the tun device and the virtio layer.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists