On Tue, Aug 2, 2016 at 9:59 PM, Michael Ellerman <m...@ellerman.id.au> wrote: > lkdtm_rodata_do_nothing() is an empty function which is generated in > order to test the non-executability of rodata. > > Currently if function tracing is enabled then an mcount callsite will be > generated for lkdtm_rodata_do_nothing(), and it will appear in the list > of available functions for function tracing (available_filter_functions). > > Given it's purpose purely as a test function, it seems preferable for > lkdtm_rodata_do_nothing() to be marked notrace, so it doesn't appear as > traceable. > > This also avoids triggering a linker bug on powerpc: > > https://sourceware.org/bugzilla/show_bug.cgi?id=20428 > > When the linker sees code that needs to generate a call stub, eg. a > branch to mcount(), it assumes the section is executable and > dereferences a NULL pointer leading to a linker segfault. Marking > lkdtm_rodata_do_nothing() notrace avoids triggering the bug because the > function contains no other function calls. > > Signed-off-by: Michael Ellerman <m...@ellerman.id.au>
Awesome! Thanks for tracking this down. I've applied it to my tree, it should get picked up by Greg on my next pull request. -Kees > --- > drivers/misc/lkdtm_rodata.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/misc/lkdtm_rodata.c b/drivers/misc/lkdtm_rodata.c > index 166b1db3969f..3564477b8c2d 100644 > --- a/drivers/misc/lkdtm_rodata.c > +++ b/drivers/misc/lkdtm_rodata.c > @@ -4,7 +4,7 @@ > */ > #include "lkdtm.h" > > -void lkdtm_rodata_do_nothing(void) > +void notrace lkdtm_rodata_do_nothing(void) > { > /* Does nothing. We just want an architecture agnostic "return". */ > } > -- > 2.7.4 > -- Kees Cook Brillo & Chrome OS Security