* [PATCH] firmware: google: coreboot: validate table bounds
@ 2026-08-01 16:56 Laxman Acharya Padhya
2026-08-03 3:11 ` Tzung-Bi Shih
0 siblings, 1 reply; 2+ messages in thread
From: Laxman Acharya Padhya @ 2026-08-01 16:56 UTC (permalink / raw)
To: Tzung-Bi Shih; +Cc: Thierry Escande, chrome-platform, linux-kernel
The existing coreboot_table_populate() bounds checks limit individual
entries to the mapped length.
However, coreboot_table_probe() replaces the platform resource length with
header and table sizes supplied by firmware before mapping the full table.
A malformed table can overflow the 32-bit size addition or advertise an
extent beyond the resource, causing the driver to map and parse memory
outside the resource. A resource shorter than the fixed header is also
mapped as though it contained a complete header.
Reject resources shorter than the fixed header. After validating the
signature, require a complete header, calculate the advertised extent with
overflow checking, and reject extents beyond the resource before remapping
the table.
Fixes: d384d6f43d1e ("firmware: google memconsole: Add coreboot support")
Signed-off-by: Laxman Acharya Padhya <acharyalaxman8848@gmail.com>
diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c
index e63933ff6..96e68ae3f 100644
--- a/drivers/firmware/google/coreboot_table.c
+++ b/drivers/firmware/google/coreboot_table.c
@@ -170,6 +170,7 @@ static int coreboot_table_populate(struct device *dev, void *ptr, resource_size_
static int coreboot_table_probe(struct platform_device *pdev)
{
resource_size_t len;
+ resource_size_t table_span;
struct coreboot_table_header *header;
struct resource *res;
struct device *dev = &pdev->dev;
@@ -181,7 +182,7 @@ static int coreboot_table_probe(struct platform_device *pdev)
return -EINVAL;
len = resource_size(res);
- if (!res->start || !len)
+ if (!res->start || len < sizeof(*header))
return -EINVAL;
/* Check just the header first to make sure things are sane */
@@ -189,19 +190,27 @@ static int coreboot_table_probe(struct platform_device *pdev)
if (!header)
return -ENOMEM;
- len = header->header_bytes + header->table_bytes;
ret = strncmp(header->signature, "LBIO", sizeof(header->signature));
+
+ if (!ret &&
+ (header->header_bytes < sizeof(*header) ||
+ check_add_overflow((resource_size_t)header->header_bytes,
+ (resource_size_t)header->table_bytes,
+ &table_span) ||
+ table_span > len))
+ ret = -EINVAL;
+
memunmap(header);
if (ret) {
dev_warn(dev, "coreboot table missing or corrupt!\n");
return -ENODEV;
}
- ptr = memremap(res->start, len, MEMREMAP_WB);
+ ptr = memremap(res->start, table_span, MEMREMAP_WB);
if (!ptr)
return -ENOMEM;
- ret = coreboot_table_populate(dev, ptr, len);
+ ret = coreboot_table_populate(dev, ptr, table_span);
memunmap(ptr);
--
2.51.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] firmware: google: coreboot: validate table bounds
2026-08-01 16:56 [PATCH] firmware: google: coreboot: validate table bounds Laxman Acharya Padhya
@ 2026-08-03 3:11 ` Tzung-Bi Shih
0 siblings, 0 replies; 2+ messages in thread
From: Tzung-Bi Shih @ 2026-08-03 3:11 UTC (permalink / raw)
To: Laxman Acharya Padhya; +Cc: Thierry Escande, chrome-platform, linux-kernel
On Sat, Aug 01, 2026 at 10:41:51PM +0545, Laxman Acharya Padhya wrote:
> The existing coreboot_table_populate() bounds checks limit individual
> entries to the mapped length.
> However, coreboot_table_probe() replaces the platform resource length with
> header and table sizes supplied by firmware before mapping the full table.
>
> A malformed table can overflow the 32-bit size addition or advertise an
> extent beyond the resource, causing the driver to map and parse memory
> outside the resource. A resource shorter than the fixed header is also
> mapped as though it contained a complete header.
>
> [...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux.git for-firmware-next
[1/1] firmware: google: coreboot: validate table bounds
commit: a58a57a1076f8c5dae0327e3710899478c3be901
Thanks!
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-08-03 3:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-01 16:56 [PATCH] firmware: google: coreboot: validate table bounds Laxman Acharya Padhya
2026-08-03 3:11 ` Tzung-Bi Shih
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox