]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
gve: fix zero-length skb frag with header-split
authorJordan Rhee <jordanrhee@google.com>
Fri, 7 Aug 2026 22:43:14 +0000 (22:43 +0000)
committerJakub Kicinski <kuba@kernel.org>
Wed, 12 Aug 2026 01:26:04 +0000 (18:26 -0700)
When header split is enabled and a header-only packet is
received such as a pure TCP ACK, GVE will indicate an
RX SKB with a zero-length fragment. If this SKB is then
hairpinned and sent back out, the GVE TX path will emit
a zero-length descriptor. Hardware considers this
an illegal descriptor and stops the queue, causing a
TX timeout and interface reset.

Fix it by not adding the zero-length skb frag.

Cc: stable@vger.kernel.org
Fixes: 5e37d8254e7f ("gve: Add header split data path")
Suggested-by: Praveen Kaligineedi <pkaligineedi@google.com>
Co-developed-by: Ziwei Xiao <ziweixiao@google.com>
Signed-off-by: Ziwei Xiao <ziweixiao@google.com>
Signed-off-by: Jordan Rhee <jordanrhee@google.com>
Signed-off-by: Harshitha Ramamurthy <hramamurthy@google.com>
Link: https://patch.msgid.link/20260807224315.234152-2-hramamurthy@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/google/gve/gve_rx_dqo.c

index 8271f731a91fc9eab099d85b52f3468433be915e..0ece2f6fdffb40bab2f231a45e8a8567110a2ea1 100644 (file)
@@ -886,6 +886,11 @@ static int gve_rx_dqo(struct napi_struct *napi, struct gve_rx_ring *rx,
                rx->rx_hsplit_unsplit_pkt += unsplit;
                rx->rx_hsplit_bytes += hdr_len;
                u64_stats_update_end(&rx->statss);
+
+               if (!buf_len) {
+                       gve_free_buffer(rx, buf_state);
+                       return 0;
+               }
        } else if (!rx->ctx.skb_head && rx->dqo.page_pool &&
                   netmem_is_net_iov(buf_state->page_info.netmem)) {
                /* when header split is disabled, the header went to the packet