CVE-2021-47282CWE-787

CVE-2021-47282

High · published May 21, 2024

CVSS v3.1
7.8
EPSS
0%
Percentile
13.3
In the wild
Unconfirmed
What it is

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

spi: bcm2835: Fix out-of-bounds access with more than 4 slaves

Commit 571e31fa60b3 ("spi: bcm2835: Cache CS register value for

->prepare_message()") limited the number of slaves to 3 at compile-time.

The limitation was necessitated by a statically-sized array prepare_cs[]

in the driver private data which contains a per-slave register value.

The commit sought to enforce the limitation at run-time by setting the

controller's num_chipselect to 3: Slaves with a higher chipselect are

rejected by spi_add_device().

However the commit neglected that num_chipselect only limits the number

of *native* chipselects. If GPIO chipselects are specified in the

device tree for more than 3 slaves, num_chipselect is silently raised by

of_spi_get_gpio_numbers() and the result are out-of-bounds accesses to

the statically-sized array prepare_cs[].

As a bandaid fix which is backportable to stable, raise the number of

allowed slaves to 24 (which "ought to be enough for anybody"), enforce

the limitation on slave ->setup and revert num_chipselect to 3 (which is

the number of native chipselects supported by the controller).

An upcoming for-next commit will allow an arbitrary number of slaves.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00233 · 13.3th percentile
Weakness
CWE-787 · Out-of-bounds Write
Published
2024-05-21T19:15Z
Affected products (8)
ProductVersionsFixed in
linux/linux_kernel≥ 5.4, < 5.4.1265.4.126
linux/linux_kernel≥ 5.5, < 5.10.445.10.44
linux/linux_kernel≥ 5.11, < 5.12.115.12.11
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (8)
EPSS history
Timeline
  • 21 MAY 14:20Z
    spi: bcm2835: Fix out-of-bounds access with more than 4 slaves
    cvelistv5