CVE-2024-56593

wifi: brcmfmac: Fix oops due to NULL pointer dereference in brcmf_sdiod_sglist_rw()

Medium · published December 27, 2024

CVSS v3.1
5.5
EPSS
0%
Percentile
14.2
In the wild
Unconfirmed
What it is

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

wifi: brcmfmac: Fix oops due to NULL pointer dereference in brcmf_sdiod_sglist_rw()

This patch fixes a NULL pointer dereference bug in brcmfmac that occurs

when a high 'sd_sgentry_align' value applies (e.g. 512) and a lot of queued SKBs

are sent from the pkt queue.

The problem is the number of entries in the pre-allocated sgtable, it is

nents = max(rxglom_size, txglom_size) + max(rxglom_size, txglom_size) >> 4 + 1.

Given the default [rt]xglom_size=32 it's actually 35 which is too small.

Worst case, the pkt queue can end up with 64 SKBs. This occurs when a new SKB

is added for each original SKB if tailroom isn't enough to hold tail_pad.

At least one sg entry is needed for each SKB. So, eventually the "skb_queue_walk loop"

in brcmf_sdiod_sglist_rw may run out of sg entries. This makes sg_next return

NULL and this causes the oops.

The patch sets nents to max(rxglom_size, txglom_size) * 2 to be able handle

the worst-case.

Btw. this requires only 64-35=29 * 16 (or 20 if CONFIG_NEED_SG_DMA_LENGTH) = 464

additional bytes of memory.

The record
Technical detail
CVSS v3.1
5.5 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00240 · 14.2th percentile
Published
2024-12-27T14:51Z
EPSS history
Timeline
  • 27 DEC 14:51Z
    wifi: brcmfmac: Fix oops due to NULL pointer dereference in brcmf_sdiod_sglist_rw()
    cvelistv5