Chrome platform driver development
 help / color / mirror / Atom feed
* [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