[SRU][R:linux-gcp][PATCH v3 1/1] gve: fix zero-length skb frag with header-split

Rickey Castillo rickey.castillo.valenzuela at canonical.com
Fri Sep 11 01:03:06 UTC 2026


From: Jordan Rhee <jordanrhee at google.com>

BugLink: https://bugs.launchpad.net/bugs/2167032

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 at vger.kernel.org
Fixes: 5e37d8254e7f ("gve: Add header split data path")
Suggested-by: Praveen Kaligineedi <pkaligineedi at google.com>
Co-developed-by: Ziwei Xiao <ziweixiao at google.com>
Signed-off-by: Ziwei Xiao <ziweixiao at google.com>
Signed-off-by: Jordan Rhee <jordanrhee at google.com>
Signed-off-by: Harshitha Ramamurthy <hramamurthy at google.com>
Link: https://patch.msgid.link/20260807224315.234152-2-hramamurthy@google.com
Signed-off-by: Jakub Kicinski <kuba at kernel.org>
(cherry picked from commit 6bf14575c65569dcded90ef78afb8a6d57323f04)
Signed-off-by: Rickey Castillo <rickey.castillo.valenzuela at canonical.com>
---
 drivers/net/ethernet/google/gve/gve_rx_dqo.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/ethernet/google/gve/gve_rx_dqo.c
index fae6ba782116..a193ec7b5ca4 100644
--- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c
+++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c
@@ -852,6 +852,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
-- 
2.53.0




More information about the kernel-team mailing list