[PATCH v3] arm64: mm: Mark .rodata as RO

Jeremy Linton jeremy.linton at arm.com
Fri Feb 26 06:59:47 PST 2016


On 02/26/2016 08:55 AM, Mark Rutland wrote:
> On Fri, Feb 19, 2016 at 11:50:32AM -0600, Jeremy Linton wrote:
>> Currently the .rodata section is actually still executable when DEBUG_RODATA
>> is enabled. This changes that so the .rodata is actually read only, no execute.
>> It also adds the .rodata section to the mem_init banner.
>>
>> Signed-off-by: Jeremy Linton <jeremy.linton at arm.com>
>> ---
>>   arch/arm64/kernel/vmlinux.lds.S |  5 +++--
>>   arch/arm64/mm/init.c            |  4 +++-
>>   arch/arm64/mm/mmu.c             | 17 +++++++++++++----
>>   3 files changed, 19 insertions(+), 7 deletions(-)
>>
>> diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
>> index 8f4fc2c..9208f53 100644
>> --- a/arch/arm64/kernel/vmlinux.lds.S
>> +++ b/arch/arm64/kernel/vmlinux.lds.S
>> @@ -114,8 +114,9 @@ SECTIONS
>>   		*(.got)			/* Global offset table		*/
>>   	}
>>
>> -	RO_DATA(PAGE_SIZE)
>> -	EXCEPTION_TABLE(8)
>> +	ALIGN_DEBUG_RO_MIN(0)
>> +	RO_DATA(PAGE_SIZE)		/* everything from this point to */
>> +	EXCEPTION_TABLE(8)		/* _etext will be marked RO NX   */
>>   	NOTES
>
> That should be ALIGN_DEBUG_RO_MIN(PAGE_SIZE), given we map .text and
> .rodata separately regardless of DEBUG_RODATA (and hence they need to
> never share a page).
>

The RO_DATA macro has an explicit alignment (PAGE_SIZE in this case) in 
it too. That is why I left it at 0 to make it clear that it wasn't 
changing the alignment unless DEBUG_RO was enabled (and in that case 
only really applies if the section_size/cont_size is enabled).









More information about the linux-arm-kernel mailing list