[PATCH] powerpc/mm/radix: Only add X for pages overlapping kernel text

Balbir Singh bsingharora at gmail.com
Thu Jun 8 17:49:07 AEST 2017


On Tue, Jun 6, 2017 at 8:17 PM, Michael Ellerman <mpe at ellerman.id.au> wrote:
> Balbir Singh <bsingharora at gmail.com> writes:
>> On Tue, Jun 6, 2017 at 3:48 PM, Michael Ellerman <mpe at ellerman.id.au> wrote:
>>> Currently we map the whole linear mapping with PAGE_KERNEL_X. Instead we
>>> should check if the page overlaps the kernel text and only then add
>>> PAGE_KERNEL_X.
> ...
>>> @@ -145,8 +147,14 @@ static int __meminit create_physical_mapping(unsigned long start,
>>>                         start = addr;
>>>                 }
>>>
>>> -               rc = radix__map_kernel_page((unsigned long)__va(addr), addr,
>>> -                                           PAGE_KERNEL_X, mapping_size);
>>> +               vaddr = (unsigned long)__va(addr);
>>> +
>>> +               if (overlaps_kernel_text(vaddr, vaddr + mapping_size))
>>> +                       prot = PAGE_KERNEL_X;
>>> +               else
>>> +                       prot = PAGE_KERNEL;
>>
>> Do we need the kvm tmp/trampoline bits like hash?
>
> Ugh, I hope not. What is that crap.
>
> It appears to be epapr paravirt only:
>
>   static int __init kvm_guest_init(void)
>   {
>         if (!kvm_para_available())
>                 goto free_tmp;
>
>         if (!epapr_paravirt_enabled)
>                 goto free_tmp;
>
>
> But I can't convince myself whether epapr_paravirt_enabled is ever set
> on Book3S guests or not.
>
> Looking at Qemu it looks like it *could* be.
>
> And why isn't that code in arch/powerpc/kvm ?

Not sure, for now

Acked-by: Balbir Singh <bsingharora at gmail.com>


More information about the Linuxppc-dev mailing list