[ovs-dev] [PATCH v2] netdev-linux: Ignore TSO packets when TSO is not enabled for userspace
Flavio Leitner
fbl at sysclose.org
Thu Jul 8 12:16:12 UTC 2021
Hi Ian,
This one affects TSO which I think you have interest.
If you're okay with the patch, could you please merge it?
Thanks,
fbl
On Mon, Jul 05, 2021 at 07:57:41AM -0400, Eelco Chaudron wrote:
> When TSO is disabled from a userspace forwarding datapath perspective,
> but TSO has been wrongly enabled on the kernel side, log a warning
> message, and drop the packet. With the current implementation,
> OVS will crash.
>
> Fixes: 73858f9db ("netdev-linux: Prepend the std packet in the TSO packet")
> Signed-off-by: Eelco Chaudron <echaudro at redhat.com>
> ---
> v2: Fixed rx->aux_bufs[i] to allow reuse
>
> lib/netdev-linux.c | 20 +++++++++++++++++---
> 1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
> index 07ece0c7f..d5e693464 100644
> --- a/lib/netdev-linux.c
> +++ b/lib/netdev-linux.c
> @@ -1292,14 +1292,28 @@ netdev_linux_batch_rxq_recv_sock(struct netdev_rxq_linux *rx, int mtu,
> for (i = 0; i < retval; i++) {
> struct dp_packet *pkt;
>
> - if (mmsgs[i].msg_len < ETH_HEADER_LEN) {
> + if (mmsgs[i].msg_hdr.msg_flags & MSG_TRUNC
> + || mmsgs[i].msg_len < ETH_HEADER_LEN) {
> struct netdev *netdev_ = netdev_rxq_get_netdev(&rx->up);
> struct netdev_linux *netdev = netdev_linux_cast(netdev_);
>
> + /* The rx->aux_bufs[i] will be re-used next time. */
> dp_packet_delete(buffers[i]);
> netdev->rx_dropped += 1;
> - VLOG_WARN_RL(&rl, "%s: Dropped packet: less than ether hdr size",
> - netdev_get_name(netdev_));
> + if (mmsgs[i].msg_hdr.msg_flags & MSG_TRUNC) {
> + /* Data is truncated, so the packet is corrupted, and needs
> + * to be dropped. This can happen if TSO/GRO is enabled in
> + * the kernel, but not in userspace, i.e. there is no dp
> + * buffer to store the full packet. */
> + VLOG_WARN_RL(&rl,
> + "%s: Dropped packet: Too big. GRO/TSO enabled?",
> + netdev_get_name(netdev_));
> + } else {
> + VLOG_WARN_RL(&rl,
> + "%s: Dropped packet: less than ether hdr size",
> + netdev_get_name(netdev_));
> + }
> +
> continue;
> }
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
--
fbl
More information about the dev
mailing list