On 8/18/2026 5:18 PM, [email protected] wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) 
> to consider:
> - [High] Missing duplication of eh_frame_mt during fork() leaves child 
> processes without stack unwind capability.

This is resolved by subsequent patch "unwind_user/eh_frame: Duplicate
registered .eh_frame[_hdr] section data on clone/fork".

> - [Medium] Executable segments with a trailing BSS section silently fail 
> .eh_frame_hdr registration.

Josh, Steven, any thoughts?

>> diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c

>> +static void elf_add_eh_frame(const struct elf_phdr *text,
>> +                         const struct elf_phdr *eh_frame,
>> +                         unsigned long base_addr)
>> +{
>> +    unsigned long eh_frame_start, eh_frame_end,
>> +                  text_start, text_end;
>> +
>> +    eh_frame_start = base_addr + eh_frame->p_vaddr;
>> +    eh_frame_end   = eh_frame_start + eh_frame->p_memsz;
>> +
>> +    text_start   = base_addr + text->p_vaddr;
>> +    text_end     = text_start + text->p_memsz;
> 
> [Severity: Medium]
> Will this silently fail to register .eh_frame_hdr for segments with a
> trailing BSS section?
> 
> When an ELF executable segment has p_memsz > p_filesz crossing a page
> boundary, the loader maps the file-backed portion and creates a separate
> anonymous VMA for the BSS.
> 
> Because text_end is calculated using p_memsz, it may extend beyond the
> file-backed VMA boundary. When this is passed to eh_frame_add_section(),
> it uses vma_lookup() and checks if the entire segment resides in a single
> VMA:
> 
> kernel/unwind/eh_frame.c:eh_frame_add_section() {
>     ...
>     if (!text_vma ||
>         !(text_vma->vm_flags & VM_EXEC) ||
>         text_end > text_vma->vm_end) {
>         return -EINVAL;
>     ...
> }
> 
> Since the file-backed VMA ends before text_end in this scenario, won't the
> text_end > text_vma->vm_end check fail and terminate registration?
> 
>> +
>> +    /* Ignore return value, eh_frame[_hdr] section isn't critical */
>> +    eh_frame_add_section(eh_frame_start, eh_frame_end, text_start, 
>> text_end);
>> +}
> 

Thanks and regards,
Jens
-- 
Jens Remus
Linux on Z Development (D3303)
[email protected] / [email protected]

IBM Deutschland Research & Development GmbH; Vorsitzender des Aufsichtsrats: 
Wolfgang Wendt; Geschäftsführung: David Faller; Sitz der Gesellschaft: 
Ehningen; Registergericht: Amtsgericht Stuttgart, HRB 243294
IBM Data Privacy Statement: https://www.ibm.com/privacy/


Reply via email to