---
id: "CVE-2026-99192"
kind: "vulnerability"
aliases: ["CVE-2026-99192"]
title: "Linux kernel bcmgenet: shared skb stalls transmit queue until watchdog reset"
severity: "unknown"
cvss: null
epss: null
exploited: false
status: "open"
category: "infrastructure"
products: []
ecosystems: []
tags: ["broadcom-hardware", "embedded", "infrastructure", "linux-kernel", "raspberry-pi"]
not_affected_if: ["no-bcmgenet-hardware", "non-linux"]
published_at: "2026-10-28T11:17:40+00:00"
first_seen_at: "2026-10-28T11:32:37+00:00"
updated_at: "2026-10-28T11:34:13+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-99192", "first_seen_at": "2026-10-28T11:32:37+00:00"}]
---

# Linux kernel bcmgenet: shared skb stalls transmit queue until watchdog reset

The bcmgenet Broadcom Ethernet driver writes its control block into a socket buffer that may still be shared and queued, so earlier transmit slots never get credited and the queue stalls until the watchdog resets it. The sources describe a denial-of-service style stall triggered by resubmitted skbs, not code execution or data theft.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Run `uname -r` and compare against the kernel build that carries the bcmgenet unshare fix; the sources do not give a fixed version.
- Check whether the host uses the bcmgenet driver: `lsmod | grep bcmgenet` or `ethtool -i eth0`.
- Read `/sys/class/net/eth0/queues/tx-0/byte_queue_limits/inflight` on an idle queue; a nonzero value that does not drop is the symptom described.

## Fix

- Update the Linux kernel to a stable release that includes the upstream commit 'net: bcmgenet: unshare the skb before writing the control block' (fixed version unknown from the sources).
- Until patched, watch for stalled tx queues and reset the interface if needed.

## Timeline

- 2026-10-28T11:32:37+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-99192

## From the sources

In the Linux kernel, the following vulnerability has been resolved:

net: bcmgenet: unshare the skb before writing the control block

bcmgenet stores first_cb, last_cb and bytes_sent in the skb control
block and reads them back on completion to free the skb and credit BQL.
ether_setup() leaves IFF_TX_SKB_SHARING set, so the stack can resubmit
a shared skb that is still in the ring. The next transmit overwrites
last_cb, so the earlier slots complete without crediting their bytes
and BQL stalls the queue until the watchdog resets it.

Unshare the skb before writing the control block.

Reproduce with pktgen in clone_skb mode, which hands the driver the same
skb while earlier copies are still in the ring:

  modprobe pktgen
  pg=/proc/net/pktgen
  echo "add_device eth0" > $pg/kpktgend_0
  echo "dst_mac AA:BB:CC:DD:EE:FF" > $pg/eth0
  echo "dst 192.0.2.1" > $pg/eth0
  echo "clone_skb 8" > $pg/eth0
  echo "count 0" > $pg/eth0
  echo start > $pg/pgctrl &
  sleep 5
  echo stop > $pg/pgctrl
  wait
  cat /sys/class/net/eth0/queues/tx-0/byte_queue_limits/inflight

inflight stays nonzero on the now idle queue. clone_skb 0 leaves it at
zero.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
