CVE-2026-46332
Description
Linux kernel greybus driver has a buffer overflow vulnerability in gb-beagleplay, potentially allowing data corruption.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Linux kernel greybus driver has a buffer overflow vulnerability in gb-beagleplay, potentially allowing data corruption.
Vulnerability
The Linux kernel's greybus driver, specifically in the gb-beagleplay component, contains a vulnerability in the cc1352_bootloader_rx() function. This function appends serdev chunks to a fixed rx_buffer before parsing bootloader packets. The issue arises because the buffer can retain leftover bytes between callbacks, and a single callback might receive multiple packets, meaning the byte count is not constrained by a single packet's length. This can lead to an overflow of the rx_buffer.
Exploitation
An attacker would need to trigger the cc1352_bootloader_rx() function with specially crafted input. The vulnerability is triggered when an incoming chunk of data does not fit into the remaining space within the rx_buffer before a memcpy() operation occurs. This requires the ability to send data to the affected device that is processed by the greybus driver.
Impact
Successful exploitation of this vulnerability could lead to an overflow of the rx_buffer. This overflow can corrupt data within the buffer, potentially leading to denial of service or unpredictable behavior within the greybus subsystem. The exact impact depends on how the corrupted data is subsequently processed by the kernel.
Mitigation
This vulnerability has been resolved in the Linux kernel. The fix involves checking if the incoming chunk fits in the remaining receive buffer space before performing the memcpy() operation. If it does not fit, the staged data is dropped, and the bytes are consumed, preventing the overflow. The specific commit addressing this is available at [1] and [2]. No information regarding workarounds or end-of-life status for affected versions is available in the provided references.
AI Insight generated on Jun 9, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected products
2Patches
80339a746ff7cgreybus: gb-beagleplay: bound bootloader receive buffering
1 file changed · +7 −1
drivers/greybus/gb-beagleplay.c+7 −1 modifieddiff --git a/drivers/greybus/gb-beagleplay.c b/drivers/greybus/gb-beagleplay.c index 87186f891a6ac..e70787146c4fa 100644 --- a/drivers/greybus/gb-beagleplay.c +++ b/drivers/greybus/gb-beagleplay.c @@ -535,6 +535,13 @@ static size_t cc1352_bootloader_rx(struct gb_beagleplay *bg, const u8 *data, int ret; size_t off = 0; + if (count > sizeof(bg->rx_buffer) - bg->rx_buffer_len) { + dev_warn(&bg->sd->dev, + "dropping oversized bootloader receive chunk"); + bg->rx_buffer_len = 0; + return count; + } + memcpy(bg->rx_buffer + bg->rx_buffer_len, data, count); bg->rx_buffer_len += count; -- cgit 1.3-korg
663c2728a6d0greybus: gb-beagleplay: bound bootloader receive buffering
1 file changed · +7 −1
drivers/greybus/gb-beagleplay.c+7 −1 modifieddiff --git a/drivers/greybus/gb-beagleplay.c b/drivers/greybus/gb-beagleplay.c index 2a207eab40452..d33b6ce3948f4 100644 --- a/drivers/greybus/gb-beagleplay.c +++ b/drivers/greybus/gb-beagleplay.c @@ -535,6 +535,13 @@ static size_t cc1352_bootloader_rx(struct gb_beagleplay *bg, const u8 *data, int ret; size_t off = 0; + if (count > sizeof(bg->rx_buffer) - bg->rx_buffer_len) { + dev_warn(&bg->sd->dev, + "dropping oversized bootloader receive chunk"); + bg->rx_buffer_len = 0; + return count; + } + memcpy(bg->rx_buffer + bg->rx_buffer_len, data, count); bg->rx_buffer_len += count; -- cgit 1.3-korg
1214bf28965cgreybus: gb-beagleplay: bound bootloader receive buffering
1 file changed · +7 −1
drivers/greybus/gb-beagleplay.c+7 −1 modifieddiff --git a/drivers/greybus/gb-beagleplay.c b/drivers/greybus/gb-beagleplay.c index 305066febbe77..244966d56c9ba 100644 --- a/drivers/greybus/gb-beagleplay.c +++ b/drivers/greybus/gb-beagleplay.c @@ -623,6 +623,13 @@ static size_t cc1352_bootloader_rx(struct gb_beagleplay *bg, const u8 *data, return count; } + if (count > sizeof(bg->rx_buffer) - bg->rx_buffer_len) { + dev_warn(&bg->sd->dev, + "dropping oversized bootloader receive chunk"); + bg->rx_buffer_len = 0; + return count; + } + memcpy(bg->rx_buffer + bg->rx_buffer_len, data, count); bg->rx_buffer_len += count; -- cgit 1.3-korg
fb91d4e49fcbgreybus: gb-beagleplay: bound bootloader receive buffering
1 file changed · +7 −1
drivers/greybus/gb-beagleplay.c+7 −1 modifieddiff --git a/drivers/greybus/gb-beagleplay.c b/drivers/greybus/gb-beagleplay.c index 87186f891a6ac..e70787146c4fa 100644 --- a/drivers/greybus/gb-beagleplay.c +++ b/drivers/greybus/gb-beagleplay.c @@ -535,6 +535,13 @@ static size_t cc1352_bootloader_rx(struct gb_beagleplay *bg, const u8 *data, int ret; size_t off = 0; + if (count > sizeof(bg->rx_buffer) - bg->rx_buffer_len) { + dev_warn(&bg->sd->dev, + "dropping oversized bootloader receive chunk"); + bg->rx_buffer_len = 0; + return count; + } + memcpy(bg->rx_buffer + bg->rx_buffer_len, data, count); bg->rx_buffer_len += count; -- cgit 1.3-korg
0339a746ff7cgreybus: gb-beagleplay: bound bootloader receive buffering
1 file changed · +7 −1
drivers/greybus/gb-beagleplay.c+7 −1 modifieddiff --git a/drivers/greybus/gb-beagleplay.c b/drivers/greybus/gb-beagleplay.c index 87186f891a6ac..e70787146c4fa 100644 --- a/drivers/greybus/gb-beagleplay.c +++ b/drivers/greybus/gb-beagleplay.c @@ -535,6 +535,13 @@ static size_t cc1352_bootloader_rx(struct gb_beagleplay *bg, const u8 *data, int ret; size_t off = 0; + if (count > sizeof(bg->rx_buffer) - bg->rx_buffer_len) { + dev_warn(&bg->sd->dev, + "dropping oversized bootloader receive chunk"); + bg->rx_buffer_len = 0; + return count; + } + memcpy(bg->rx_buffer + bg->rx_buffer_len, data, count); bg->rx_buffer_len += count; -- cgit 1.3-korg
663c2728a6d0greybus: gb-beagleplay: bound bootloader receive buffering
1 file changed · +7 −1
drivers/greybus/gb-beagleplay.c+7 −1 modifieddiff --git a/drivers/greybus/gb-beagleplay.c b/drivers/greybus/gb-beagleplay.c index 2a207eab40452..d33b6ce3948f4 100644 --- a/drivers/greybus/gb-beagleplay.c +++ b/drivers/greybus/gb-beagleplay.c @@ -535,6 +535,13 @@ static size_t cc1352_bootloader_rx(struct gb_beagleplay *bg, const u8 *data, int ret; size_t off = 0; + if (count > sizeof(bg->rx_buffer) - bg->rx_buffer_len) { + dev_warn(&bg->sd->dev, + "dropping oversized bootloader receive chunk"); + bg->rx_buffer_len = 0; + return count; + } + memcpy(bg->rx_buffer + bg->rx_buffer_len, data, count); bg->rx_buffer_len += count; -- cgit 1.3-korg
fb91d4e49fcbgreybus: gb-beagleplay: bound bootloader receive buffering
1 file changed · +7 −1
drivers/greybus/gb-beagleplay.c+7 −1 modifieddiff --git a/drivers/greybus/gb-beagleplay.c b/drivers/greybus/gb-beagleplay.c index 87186f891a6ac..e70787146c4fa 100644 --- a/drivers/greybus/gb-beagleplay.c +++ b/drivers/greybus/gb-beagleplay.c @@ -535,6 +535,13 @@ static size_t cc1352_bootloader_rx(struct gb_beagleplay *bg, const u8 *data, int ret; size_t off = 0; + if (count > sizeof(bg->rx_buffer) - bg->rx_buffer_len) { + dev_warn(&bg->sd->dev, + "dropping oversized bootloader receive chunk"); + bg->rx_buffer_len = 0; + return count; + } + memcpy(bg->rx_buffer + bg->rx_buffer_len, data, count); bg->rx_buffer_len += count; -- cgit 1.3-korg
1214bf28965cgreybus: gb-beagleplay: bound bootloader receive buffering
1 file changed · +7 −1
drivers/greybus/gb-beagleplay.c+7 −1 modifieddiff --git a/drivers/greybus/gb-beagleplay.c b/drivers/greybus/gb-beagleplay.c index 305066febbe77..244966d56c9ba 100644 --- a/drivers/greybus/gb-beagleplay.c +++ b/drivers/greybus/gb-beagleplay.c @@ -623,6 +623,13 @@ static size_t cc1352_bootloader_rx(struct gb_beagleplay *bg, const u8 *data, return count; } + if (count > sizeof(bg->rx_buffer) - bg->rx_buffer_len) { + dev_warn(&bg->sd->dev, + "dropping oversized bootloader receive chunk"); + bg->rx_buffer_len = 0; + return count; + } + memcpy(bg->rx_buffer + bg->rx_buffer_len, data, count); bg->rx_buffer_len += count; -- cgit 1.3-korg
Vulnerability mechanics
No source-code context for this CVE — mechanics is only generated when we can read the actual fix diff. Without that, the four sections (root cause, attack vector, affected code, fix) would be speculation rather than analysis.
References
4News mentions
1- Linux Kernel: 25 Vulnerabilities Disclosed in Single Batch on June 8-9, 2026Vypr Intelligence · Jun 9, 2026