lkml.org 
[lkml]   [2018]   [Sep]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch V3 01/11] x86/mm/init32: Mark text and rodata RO in one go
    The sequence of marking text and rodata read-only in 32bit init is:

    set_ro(text);
    kernel_set_to_readonly = 1;
    set_ro(rodata);

    When kernel_set_to_readonly is 1 it enables the protection mechanism in CPA
    for the read only regions. With the upcoming checks for existing mappings
    this consequently triggers the warning about an existing mapping being
    incorrect vs. static protections because rodata has not been converted yet.

    There is no technical reason to split the two, so just combine the RO
    protection to convert text and rodata in one go.

    Convert the printks to pr_info while at it.

    Reported-by: kernel test robot <rong.a.chen@intel.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    ---
    arch/x86/mm/init_32.c | 23 ++++-------------------
    1 file changed, 4 insertions(+), 19 deletions(-)

    --- a/arch/x86/mm/init_32.c
    +++ b/arch/x86/mm/init_32.c
    @@ -923,34 +923,19 @@ static void mark_nxdata_nx(void)
    void mark_rodata_ro(void)
    {
    unsigned long start = PFN_ALIGN(_text);
    - unsigned long size = PFN_ALIGN(_etext) - start;
    + unsigned long size = (unsigned long)__end_rodata - start;

    set_pages_ro(virt_to_page(start), size >> PAGE_SHIFT);
    - printk(KERN_INFO "Write protecting the kernel text: %luk\n",
    + pr_info("Write protecting kernel text and read-only data: %luk\n",
    size >> 10);

    kernel_set_to_readonly = 1;

    #ifdef CONFIG_CPA_DEBUG
    - printk(KERN_INFO "Testing CPA: Reverting %lx-%lx\n",
    - start, start+size);
    - set_pages_rw(virt_to_page(start), size>>PAGE_SHIFT);
    -
    - printk(KERN_INFO "Testing CPA: write protecting again\n");
    - set_pages_ro(virt_to_page(start), size>>PAGE_SHIFT);
    -#endif
    -
    - start += size;
    - size = (unsigned long)__end_rodata - start;
    - set_pages_ro(virt_to_page(start), size >> PAGE_SHIFT);
    - printk(KERN_INFO "Write protecting the kernel read-only data: %luk\n",
    - size >> 10);
    -
    -#ifdef CONFIG_CPA_DEBUG
    - printk(KERN_INFO "Testing CPA: undo %lx-%lx\n", start, start + size);
    + pr_info("Testing CPA: Reverting %lx-%lx\n", start, start + size);
    set_pages_rw(virt_to_page(start), size >> PAGE_SHIFT);

    - printk(KERN_INFO "Testing CPA: write protecting again\n");
    + pr_info("Testing CPA: write protecting again\n");
    set_pages_ro(virt_to_page(start), size >> PAGE_SHIFT);
    #endif
    mark_nxdata_nx();

    \
     
     \ /
      Last update: 2018-09-17 16:38    [W:4.508 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site