Skip to content

Conversation

rosslagerwall
Copy link
Contributor

The call to update_mem_attrs() takes an aligned pointer within an allocated region but passes the entire size of the allocated region. The result is that Shim may remove execute permission from some pages belonging to GRUB causing a page fault upon returning from the LoadImage call.

@rosslagerwall
Copy link
Contributor Author

The three test failures are build errors and don't seem to be related to the change here.

The call to update_mem_attrs() takes an aligned pointer within an
allocated region but passes the entire size of the allocated region. The
result is that Shim may remove execute permission from some pages
belonging to GRUB causing a page fault upon returning from the LoadImage
call.

There are two cases:
* When loading the image, set the memory attributes for exactly what we
  intend to load.
* When freeing the image, be cautious and apply the edk2 workaround for
  the entire allocated region.

Fixes: 226fee2 ("PE Loader: support and require NX")
Fixes: 2f64bb9 ("loader-protocol: add workaround for EDK2 2025.02 page fault on FreePages")
Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
@rosslagerwall rosslagerwall force-pushed the private/rossla/memattrs branch from ccf3051 to e2fbcd2 Compare August 15, 2025 16:47
@rosslagerwall
Copy link
Contributor Author

I've updated the PR with another case that I found (and added Fixes tags).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant