Re: [PATCH v2] ARM: mm: mark section-aligned portion of rodata NX

From: Arnd Bergmann
Date: Fri Feb 12 2016 - 04:47:04 EST


On Thursday 11 February 2016 18:00:32 Russell King - ARM Linux wrote:
> On Fri, Jan 22, 2016 at 01:19:03PM -0800, Kees Cook wrote:
> > On Tue, Dec 8, 2015 at 10:38 AM, Kees Cook <keescook@xxxxxxxxxxxx> wrote:
> > > On Mon, Dec 7, 2015 at 11:47 PM, Ard Biesheuvel
> > > <ard.biesheuvel@xxxxxxxxxx> wrote:
> > >> On 7 December 2015 at 23:35, Kees Cook <keescook@xxxxxxxxxxxx> wrote:
> > >>> /*
> > >>> + * Without CONFIG_DEBUG_ALIGN_RODATA, __start_rodata_section_aligned will
> > >>> + * be the first section-aligned location after __start_rodata. Otherwise,
> > >>> + * it will be equal to __start_rodata.
> > >>> + */
> > >>> +__start_rodata_section_aligned = ALIGN(__start_rodata, 1 << SECTION_SHIFT);
> ...
>
> I'm afraid this causes build errors on two configurations:
>
> ./arch/arm/kernel/vmlinux.lds:701: undefined symbol `SECTION_SHIFT' referenced in expression
>
> which I think is down to the new __start_rodata_section_aligned line.
>
> Olof's builder errored out with this for both allnoconfig and
> lpc18xx_defconfig builds. Both probably due to CONFIG_MMU being
> unset, and hence no definition for SECTION_SHIFT.
>
> I think you need to make this conditional on CONFIG_MMU.

I've hit another problem with this patch, when using XIP_KERNEL, I now see

arch/arm/mm/built-in.o:(.data+0x4bc): undefined reference to `__start_rodata_section_aligned'

in linux-next, apparently because of the combination with "ARM: 8513/1: xip: Move
XIP linking to a separate file".

Arnd