data built 2026-10-19T13:16:53Z

Look up another CVE · open CVE-2026-72343 in the interactive tracker

CVE-2026-72343

net/mlx5e: Fix HV VHCA stats zero-sized buffer allocation

8.4 EPSS 0.2% AV:L

Published 2026-08-15 (2 months ago) by the Linux kernel CNA. Subsystem drivers/net. Debian urgency: not yet assigned.

What to do, per Debian release

Debian's own status for CVE-2026-72343 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source

ReleaseStatus VersionWhat this means
Debian 12bookwormfixed6.1.180-1Update the kernel and reboot. Fixed in 6.1.180-1. A running kernel keeps the old code until the machine restarts.
Debian 13trixiefixed6.12.100-1Update the kernel and reboot. Fixed in 6.12.100-1. A running kernel keeps the old code until the machine restarts.
Debian 14forkyfixed7.1.5-1Update the kernel and reboot. Fixed in 7.1.5-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.1.5-1Update the kernel and reboot. Fixed in 7.1.5-1. A running kernel keeps the old code until the machine restarts.

The vulnerability

What the bug is

mlx5e_hv_vhca_stats_create() is called from mlx5e_nic_enable(), before mlx5e_open(). At that point priv->stats_nch is still zero, because it is only ever incremented in mlx5e_channel_stats_alloc(), which is reached only from mlx5e_open_channel(). mlx5e_hv_vhca_stats_buf_size() therefore returns 0, and kvzalloc(0, GFP_KERNEL) returns ZERO_SIZE_PTR ((void *)16) rather than NULL. The "if (!buf)" guard does not catch this, and mlx5e_hv_vhca_stats_create() completes "successfully" with priv->stats_agent.buf set to ZERO_SIZE_PTR. Once channels are opened (priv->stats_nch > 0) and the hypervisor enables stats reporting, mlx5e_hv_vhca_stats_work() recomputes buf_len using the new non-zero stats_nch and calls memset(buf, 0, buf_len) on ZERO_SIZE_PTR, faulting at address 0x10. Allocate the buffer based on priv->max_nch, which is set in mlx5e_priv_init() and is the upper bound on stats_nch: - Add a separate helper mlx5e_hv_vhca_stats_buf_max_size() that returns sizeof(per_ring_stats) * max(max_nch, stats_nch), and use it for the kvzalloc() in mlx5e_hv_vhca_stats_create(). - Keep mlx5e_hv_vhca_stats_buf_size() (which returns based on stats_nch) for the worker's active payload size, so the wire format (block->rings = stats_nch) and the amount of data filled by mlx5e_hv_vhca_fill_stats() are unchanged. The max(max_nch, stats_nch) guard handles the rare case where mlx5e_attach_netdev() recomputes max_nch downward across a detach/resume cycle while priv->stats_nch persists (mlx5e_detach_netdev does not call mlx5e_priv_cleanup, so stats_nch is only reset when the netdev is destroyed). Without the guard, the worker could compute buf_len from stats_nch and overrun the smaller buffer allocated based on the reduced max_nch. Allocating a non-zero buffer also makes the kvzalloc() failure path in mlx5e_hv_vhca_stats_create() reachable for the first time: it returns early without (re)creating the agent. Clear priv->stats_agent.{agent,buf} in mlx5e_hv_vhca_stats_destroy() after freeing them, so that if a later create() bails out on this path, a subsequent teardown does not double-free the stale agent/buffer left from a previous enable/disable cycle. This mirrors the existing mlx5e pattern of preallocating arrays of size max_nch (e.g. priv->channel_stats) and lazily populating entries up to stats_nch on demand.

Where it lives

The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.

drivers/net/ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c

What this is
MELLANOX MLX5 core VPI driverMAINTAINERS section matched on drivers/net/ethernet/mellanox/mlx5/core/ · netdev@vger.kernel.org · Maintained
Show whether Debian builds this, per release

Not established. This site could not find the build rule for the affected file in the kernel trees Debian ships, so it has no answer about whether Debian compiles this code. Read that as unknown, never as absent.

  • bookworm, trixie, forky, sid?
?
not established - no Makefile entry for the affected file

Where a release above reads "not established", no build rule for the affected file was found in that release's kernel tree. That is a gap in this lookup, not a finding that the code is absent.

From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS

Signals

Published
2026-08-15 (2 months ago)source
CVSS
8.4 high
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hsource recompute it
Attack vector
local (AV:L)source
EPSS
0.20%, higher than 8.6% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
not yet assignedsource
Subsystem
drivers/net

Upstream fixes

The versions the CNA records as introducing and fixing this, and the commit for each. source

IntroducedFixed inCommit
5.176.1.1783b3a552cf88e
5.176.6.1455b927dcec5f1
5.176.12.9722c1d5ecccf9
5.176.18.40420aabb32da4
5.177.1.5abc4c56427f1
5.177.225f6b929c7e3

Why the CNA scored it this way

Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source

AV:LAttack vector, local
The flaw is reached via the Hyper-V VMBus PCI config back-channel (PCI_INVALIDATE_BLOCK) into mlx5e HV VHCA stats handling during mlx5e driver operation on Azure mlx5 NICs, not via remote network packets or guest syscall/ioctl paths.
AC:LAttack complexity, low
mlx5e_nic_enable always calls mlx5e_hv_vhca_stats_create before mlx5e_open, so kvzalloc(0) deterministically stores ZERO_SIZE_PTR; once channels open and the hypervisor enables stats reporting, the worker always memset()s with buf_len>0 and faults.
PR:NPrivileges required, none
On Azure/Hyper-V mlx5 VMs the host routinely drives VHCA stats collection over the PCI config back-channel during normal operation; no guest credentials, CAP_NET_ADMIN, or other elevated guest privileges are required beyond standard VM boot with the NIC active.
UI:NUser interaction, none
Triggering requires only normal VM boot and mlx5e driver bring-up with channels opened; no victim file open, mount, or other interactive administrator action is needed to reach the faulty memset path.
S:UScope, unchanged
Kernel memory corruption and panic are confined to the guest kernel running mlx5e on the affected VM; the bug does not cross VM/host, IOMMU, or other security boundaries into a separate authority.
C:HConfidentiality impact, high
memset(buf,0,buf_len) on ZERO_SIZE_PTR is an out-of-bounds write from a near-NULL kernel address; per kernel guidance any such memory corruption can be leveraged for information disclosure even though the immediate operation writes zeros.
I:HIntegrity impact, high
The worker performs a large out-of-bounds write via memset on the bogus buffer pointer, and the pre-fix sizing logic can also overrun a too-small allocation when stats_nch exceeds max_nch after detach/resume, enabling arbitrary kernel write primitives.
A:HAvailability impact, high
The memset on ZERO_SIZE_PTR faults at address 0x10 causing a kernel oops or panic, reliably denying availability of Azure/Hyper-V guests using CONFIG_PCI_HYPERV_INTERFACE mlx5 NICs whenever the hypervisor enables stats reporting.