Re: [PATCH v2] module: Harden STRICT_MODULE_RWX

From: peterz
Date: Tue Aug 11 2020 - 14:16:44 EST


On Tue, Aug 11, 2020 at 06:01:35PM +0200, Jessica Yu wrote:

> > > On Tue, Aug 11, 2020 at 04:34:27PM +0200, Mauro Carvalho Chehab wrote:
> > > > [33] .plt PROGBITS 0000000000000340 00035c80
> > > > 0000000000000001 0000000000000000 WAX 0 0 1
> > > > [34] .init.plt NOBITS 0000000000000341 00035c81
> > > > 0000000000000001 0000000000000000 WA 0 0 1
> > > > [35] .text.ftrace[...] PROGBITS 0000000000000342 00035c81
> > > > 0000000000000001 0000000000000000 WAX 0 0 1

> Interesting, my cross-compiled modules do not have the executable flag -
>
> [38] .plt NOBITS 0000000000000340 00038fc0
> 0000000000000001 0000000000000000 WA 0 0 1
> [39] .init.plt NOBITS 0000000000000341 00038fc0
> 0000000000000001 0000000000000000 WA 0 0 1
> [40] .text.ftrace_tram NOBITS 0000000000000342 00038fc0
> 0000000000000001 0000000000000000 WA 0 0 1

> I'm a bit confused about what NOLOAD actually implies in this context. From the
> ld documentation - "The `(NOLOAD)' directive will mark a section to not be
> loaded at run time." But these sections are marked SHF_ALLOC and are referenced
> to in the module plt code. Or does it just tell the linker to not initialize it?

Yeah, that confusion is wide-spread, so much so that bfd-ld and gold,
both in bintils, had different behaviour at some point.

Anyway, another clue is that your build has all NOBITS, while Mauro's
build has PROGBITS for the broken sections.

Anyway, my gcc-10.1/binutils-2.34 cross tool chain (from k.org)
generates the same as Jessica's too. I wonder if binutils-2.35 is
wonky...