ReleaseMicrosoftMicrosoftpublished Apr 2, 2026seen Jun 26

microsoft/mu_basecore v2025110001.0.1

microsoft/mu_basecore

Open original ↗

Captured source

source ↗
published Apr 2, 2026seen Jun 26captured 2whttp 200method plain

v2025110001.0.1

Repository: microsoft/mu_basecore

Tag: v2025110001.0.1

Published: 2026-04-02T18:22:55Z

Prerelease: no

Release notes:

What's Changed

🐛 Bug Fixes

UefiCpuPkg: ArmMmuLib: Check if Block Split Following Page Alloc @os-d (#1735)

Change Details

Description

Currently, there is a bug in UpdateRegionMappingRecursive() when guard pages are enabled and a large page is being split.

The code checks whether the page table is a block or table and seeing that it is a block, allocates a new page table for the next level. However, when it does this, it will call an additional recursive call into the page table updating logic to make sure the new page table page is mapped. In addition, when guard pages are enabled, it will mark the guard page as RP. If the guard page is in the same block as we are already trying to split, the recursive call will split the block and mark the guard page as RP.

When we return to the original call, it will fill out the now orphaned page table but never install it into the page table hierarchy (and if it did, it would lose the guard page). This has been observed to cause a driver's code section to still have NX set on it and so crash when trying to execute.

This commit resolves the issue by checking if the block has already been split when we return from the new page table allocation. If it has, we simply update the existing table mapping instead of trying to split the block.

The allocated page table page cannot be immediately freed, because this might trigger the block to get re-merged, so a reference to it is held until the end of updating this level and subsequent levels, when it can be safely freed.

  • [x] Impacts functionality?
  • [ ] Impacts security?
  • [ ] Breaking change?
  • [ ] Includes tests?
  • [ ] Includes documentation?

How This Was Tested

Tested on a physical ARM64 platform with NX and page guard enabled. System crashes before this change and boots with it.

Integration Instructions

N/A.

Full Changelog: https://github.com/microsoft/mu_basecore/compare/v2025110001.0.0...v2025110001.0.1