Message ID | 1500015083-23511-1-git-send-email-mpe@ellerman.id.au (mailing list archive) |
---|---|
State | Accepted |
Commit | b134bd90286dc9f2952c35a91ab405474ca9374c |
Headers | show |
On Fri, Jul 14, 2017 at 4:51 PM, Michael Ellerman <mpe@ellerman.id.au> wrote: > Move the core logic into a helper, so we can use it for changing permissions > other than _PAGE_WRITE. > > Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> > --- > arch/powerpc/mm/pgtable-radix.c | 20 +++++++++++++++----- > 1 file changed, 15 insertions(+), 5 deletions(-) > > diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c > index 8c13e4282308..336e52ec652c 100644 > --- a/arch/powerpc/mm/pgtable-radix.c > +++ b/arch/powerpc/mm/pgtable-radix.c > @@ -112,10 +112,9 @@ int radix__map_kernel_page(unsigned long ea, unsigned long pa, > } > > #ifdef CONFIG_STRICT_KERNEL_RWX > -void radix__mark_rodata_ro(void) > +void radix__change_memory_range(unsigned long start, unsigned long end, > + unsigned long clear) > { > - unsigned long start = (unsigned long)_stext; > - unsigned long end = (unsigned long)__init_begin; > unsigned long idx; > pgd_t *pgdp; > pud_t *pudp; > @@ -125,7 +124,8 @@ void radix__mark_rodata_ro(void) > start = ALIGN_DOWN(start, PAGE_SIZE); > end = PAGE_ALIGN(end); // aligns up > > - pr_devel("marking ro start %lx, end %lx\n", start, end); > + pr_debug("Changing flags on range %lx-%lx removing 0x%lx\n", > + start, end, clear); > > for (idx = start; idx < end; idx += PAGE_SIZE) { > pgdp = pgd_offset_k(idx); > @@ -147,11 +147,21 @@ void radix__mark_rodata_ro(void) > if (!ptep) > continue; > update_the_pte: > - radix__pte_update(&init_mm, idx, ptep, _PAGE_WRITE, 0, 0); > + radix__pte_update(&init_mm, idx, ptep, clear, 0, 0); > } > > radix__flush_tlb_kernel_range(start, end); > } > + > +void radix__mark_rodata_ro(void) > +{ > + unsigned long start, end; > + > + start = (unsigned long)_stext; > + end = (unsigned long)__init_begin; > + > + radix__change_memory_range(start, end, _PAGE_WRITE); > +} > #endif /* CONFIG_STRICT_KERNEL_RWX */ > Looks good, I had something similar for the patches to enable relocation, but that's a a larger chunk. Reviewed-by: Balbir Singh <bsingharora@gmail.com>
On Fri, 2017-07-14 at 06:51:21 UTC, Michael Ellerman wrote: > Move the core logic into a helper, so we can use it for changing permissions > other than _PAGE_WRITE. > > Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> > Reviewed-by: Balbir Singh <bsingharora@gmail.com> Series applied to powerpc fixes. https://git.kernel.org/powerpc/c/b134bd90286dc9f2952c35a91ab405 cheers
diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c index 8c13e4282308..336e52ec652c 100644 --- a/arch/powerpc/mm/pgtable-radix.c +++ b/arch/powerpc/mm/pgtable-radix.c @@ -112,10 +112,9 @@ int radix__map_kernel_page(unsigned long ea, unsigned long pa, } #ifdef CONFIG_STRICT_KERNEL_RWX -void radix__mark_rodata_ro(void) +void radix__change_memory_range(unsigned long start, unsigned long end, + unsigned long clear) { - unsigned long start = (unsigned long)_stext; - unsigned long end = (unsigned long)__init_begin; unsigned long idx; pgd_t *pgdp; pud_t *pudp; @@ -125,7 +124,8 @@ void radix__mark_rodata_ro(void) start = ALIGN_DOWN(start, PAGE_SIZE); end = PAGE_ALIGN(end); // aligns up - pr_devel("marking ro start %lx, end %lx\n", start, end); + pr_debug("Changing flags on range %lx-%lx removing 0x%lx\n", + start, end, clear); for (idx = start; idx < end; idx += PAGE_SIZE) { pgdp = pgd_offset_k(idx); @@ -147,11 +147,21 @@ void radix__mark_rodata_ro(void) if (!ptep) continue; update_the_pte: - radix__pte_update(&init_mm, idx, ptep, _PAGE_WRITE, 0, 0); + radix__pte_update(&init_mm, idx, ptep, clear, 0, 0); } radix__flush_tlb_kernel_range(start, end); } + +void radix__mark_rodata_ro(void) +{ + unsigned long start, end; + + start = (unsigned long)_stext; + end = (unsigned long)__init_begin; + + radix__change_memory_range(start, end, _PAGE_WRITE); +} #endif /* CONFIG_STRICT_KERNEL_RWX */ static inline void __meminit print_mapping(unsigned long start,
Move the core logic into a helper, so we can use it for changing permissions other than _PAGE_WRITE. Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> --- arch/powerpc/mm/pgtable-radix.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)