Align pushed argv table before execve on AArch64#346
Open
Ebola-Chan-bot wants to merge 1 commit intotermux:masterfrom
Open
Align pushed argv table before execve on AArch64#346Ebola-Chan-bot wants to merge 1 commit intotermux:masterfrom
Ebola-Chan-bot wants to merge 1 commit intotermux:masterfrom
Conversation
When shebang expansion rewrites argv[] through push_array_of_xpointers(), the copied pointer table can land at a misaligned stack address on AArch64. The kernel then rejects execve() with EFAULT even though argv, envp and the strings remain readable. Compute padding from the current stack pointer before alloc_mem() so the copied block stays 16-byte aligned on AArch64 and word aligned on other architectures. The padding stays above the copied block, so the previously computed pointee offsets remain valid.
There was a problem hiding this comment.
Pull request overview
This PR fixes an AArch64-specific execve() failure where shebang expansion rewrites argv[] via push_array_of_xpointers() and the newly pushed argv pointer table can end up misaligned on the tracee stack, causing the kernel to reject execve() with EFAULT.
Changes:
- Compute stack padding before
alloc_mem()so the pushed pointer table base remains 16-byte aligned on AArch64. - Preserve existing behavior on other architectures by aligning to the tracee word size.
- Keep padding above the copied data to avoid invalidating previously computed pointee offsets.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When shebang expansion rewrites argv[] through push_array_of_xpointers(), the copied pointer table can land at a misaligned stack address on AArch64. The kernel then rejects execve() with EFAULT even though argv, envp and the strings remain readable.
Compute padding from the current stack pointer before alloc_mem() so the copied block stays 16-byte aligned on AArch64 and word aligned on other architectures. The padding stays above the copied block, so the previously computed pointee offsets remain valid.