On Tue, Jan 06, 2026 at 03:12:59PM +0100, Ahmad Fatoum wrote:
> Hi,
> 
> On 1/6/26 1:53 PM, Sascha Hauer wrote:
> > Fix the linker script to generate three distinct PT_LOAD segments with
> > correct permissions instead of combining .rodata with .data.
> 
> Does this need to be moved before the previous patch to avoid
> intermittent breakage?
> 
> > Before this fix, the linker auto-generated only two PT_LOAD segments:
> > 1. Text segment (PF_R|PF_X)
> > 2. Data segment (PF_R|PF_W) - containing .rodata, .data, .bss, etc.
> > 
> > This caused .rodata to be mapped with write permissions when
> > riscv_mmu_setup_from_elf() or riscv_pmp_setup_from_elf() set up memory
> > permissions based on ELF segments, defeating the W^X protection.
> > 
> > With explicit PHDRS directives, we now generate three segments:
> > 1. text segment (PF_R|PF_X): .text and related code sections
> > 2. rodata segment (PF_R): .rodata and related read-only sections
> > 3. data segment (PF_R|PF_W): .data, .bss, and related sections
> > 
> > This ensures riscv_mmu_setup_from_elf() and riscv_pmp_setup_from_elf()
> > correctly map .rodata as read-only instead of read-write.
> > 
> > Also update the prelink script to handle binaries without a PT_DYNAMIC
> > segment, as the new PHDRS layout may result in this case.
> 
> Did you observe this happening?

I did during development, but not any longer. Maybe this is no longer
necessary due to other changes. I'll remove that for now.

Sascha

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

Reply via email to