Thread (15 messages) flat view 15 messages, 5 authors, 2018-06-29

[PATCH] Arm: mm: ftrace: Only set text back to ro after kernel has been marked ro

From: rostedt@goodmis.org (Steven Rostedt)
Date: 2018-06-29 15:17:05
Also in: lkml

On Fri, 29 Jun 2018 16:47:14 +0200
Matthias Reichl [off-list ref] wrote:
On Tue, Dec 05, 2017 at 12:14:46PM -0800, Kees Cook wrote:
quoted
On Tue, Dec 5, 2017 at 12:09 PM, Russell King - ARM Linux
[off-list ref] wrote:  
quoted
On Tue, Dec 05, 2017 at 11:35:59AM -0800, Kees Cook wrote:  
quoted
We don't _need_ to, but they're all contiguous, so the ro_perms array
used by set_kernel_text_*() is actually only a single entry:

static struct section_perm ro_perms[] = {
        /* Make kernel code and rodata RX (set RO). */
        {
                .name   = "text/rodata RO",
                .start  = (unsigned long)_stext,
                .end    = (unsigned long)__init_begin,
...  
Well, they may not be contiguous - it depends on DEBUG_ALIGN_RODATA.  
Maybe I'm picking a slightly wrong word. I guess I meant adjacent. The
range _stext to __init_begin is all read-only, though there may be
padding (controlled by DEBUG_ALIGN_RODATA), to allow a split for NX
markings on rodata.
  
quoted
Either way, we have __start_rodata_section_aligned, which is either
the start of the read-only data section, or the start of the first
section beyond __start_rodata if DEBUG_ALIGN_RODATA is not set.

Given that __start_rodata_section_aligned will always be less than
__init_begin, is there any reason not to make the above end at
__start_rodata_section_aligned, thereby allowing more of the read-only
data (in the case of DEBUG_ALIGN_RODATA=n) or all of the read-only
data (in the case of DEBUG_ALIGN_RODATA=y) to remain write-protected?  
Sure, there's no reason not to split this into two entries. It'll
require some reworking of the function calls to get it right,
obviously.  
Gentle ping, arm is still oopsing when the function tracer is
enabled at boot time.
I take it that my patch never got applied:

 http://lkml.kernel.org/r/20180621124710.453ee0ae at gandalf.local.home

-- Steve

Tested on bcm2835 (RPiB+) with current mainline tree
(githash 90368a37fbbe) and bcm2835_defconfig.

arm64 seems to be fine, tested on bcm2837 (RPi3) with same tree and
arm64 defconfig plus function tracer enabled.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help