Issue #522 has been updated by Martin Roth.

Status changed from New to Closed

Fixed with https://review.coreboot.org/c/coreboot/+/79905/

----------------------------------------
Bug #522: `region_overlap()` function might not work as expected due to an 
integer overflow in `region_end()` function.
https://ticket.coreboot.org/issues/522#change-1895

* Author: Vadim Zaliva
* Status: Closed
* Priority: Normal
* Category: coreboot common code
* Target version: none
* Start date: 2023-12-27
* Affected versions: master
* Related links: https://review.coreboot.org/q/topic:enforce_region_api
----------------------------------------
`region_overlap()` function checks whether or not two memory regions overlap. 
Memory regions are represented as a region struct that contains the region's 
offset and size. This function then relies on `region_end()` function to 
compute the end of the region. `region_end()` function is susceptible to an 
integer overflow, which might result in the incorrect behaviour of 
`region_overlap()` function.

An example of inputs that lead to wrong behaviour:
```
struct region r1 = {SIZE_MAX - 10, 20};
struct region r2 = {SIZE_MAX - 20, 15};
```
It returns 0, but since the regions actually overlap, it should return 1.

`region_overlap()` function is used in `smm_region_overlaps_handler()` 
function, which is itself used in SMI handlers to validate address values that 
come from an untrusted environment. This is necessary to prevent security 
vulnerabilities such as described in [BARing the System by Yuriy Bulygin, 
Oleksandr Bazhaniuk et 
al.](https://www.c7zero.info/stuff/REConBrussels2017_BARing_the_system.pdf)

We do not have an example of an exploit based on this incorrect behaviour and 
are aware of the existence of one. However, theoretically, this could lead to 
security vulnerabilities.

This bug was found during an ongoing [Coreboot Formal Verification 
Project](https://zaliva.org/UCSC-Twisted-Presentation-20231211.pdf), which aims 
to prove some important security properties of the coreboot’s SMI handler for 
the Gemini Lake/Octopus platform using Coq proof assistant and Verified 
Software Toolchain framework.


---Files--------------------------------
diff.txt (930 Bytes)


-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
https://ticket.coreboot.org/my/account
_______________________________________________
coreboot mailing list -- coreboot@coreboot.org
To unsubscribe send an email to coreboot-le...@coreboot.org

Reply via email to