2010-04-03 06:44:36

by Suresh Siddha

[permalink] [raw]
Subject: Re: [PATCH 1/4] [tip:x86/mm] Correcting improper large page preservation

On Wed, 2010-03-31 at 18:59 -0700, Siarhei Liakh wrote:
> + /*
> + * .data and .bss should always be writable.
> + */
> + if ((within(pfn, __pa((unsigned long)_sdata) >> PAGE_SHIFT,
> + __pa((unsigned long)_edata) >> PAGE_SHIFT)) ||
> + (within(pfn, __pa((unsigned long)__bss_start) >> PAGE_SHIFT,
> + __pa((unsigned long)__bss_stop) >> PAGE_SHIFT))) {
> + pgprot_val(required) |= _PAGE_RW;
> + }

I have reviewed this patch and the only comment I have is:

On 64bit kernels, kernel text/data mapping and kernel identity mappings
are different virtual addresses mapping to same pfn ranges. For the
data/bss pages, does it help (in identifying certain data corruptions
more easily) in making the kernel identity mapping to be set to
read-only and enforce the need of RW only for the kernel data mappings.

Or is there some obscure code that uses something like
__va(__pa(data_symbol)) and writes to it?

If not, we can remove the __pa() constructs above and use the addr for
comparisons.

Otherwise this patch looks good to me.

Reviewed-by: Suresh Siddha <[email protected]>


2010-04-06 14:51:50

by Siarhei Liakh

[permalink] [raw]
Subject: Re: [PATCH 1/4] [tip:x86/mm] Correcting improper large page preservation

On Sat, Apr 3, 2010 at 2:43 AM, Suresh Siddha <[email protected]> wrote:
> On Wed, 2010-03-31 at 18:59 -0700, Siarhei Liakh wrote:
>> + ? ? /*
>> + ? ? ?* .data and .bss should always be writable.
>> + ? ? ?*/
>> + ? ? if ((within(pfn, __pa((unsigned long)_sdata) >> PAGE_SHIFT,
>> + ? ? ? ? ? ? ? ?__pa((unsigned long)_edata) >> PAGE_SHIFT)) ||
>> + ? ? ? ? (within(pfn, __pa((unsigned long)__bss_start) >> PAGE_SHIFT,
>> + ? ? ? ? ? ? ? ?__pa((unsigned long)__bss_stop) >> PAGE_SHIFT))) {
>> + ? ? ? ? ? ? pgprot_val(required) |= _PAGE_RW;
>> + ? ? }
>
> I have reviewed this patch and the only comment I have is:
>
> On 64bit kernels, kernel text/data mapping and kernel identity mappings
> are different virtual addresses mapping to same pfn ranges. For the
> data/bss pages, does it help (in identifying certain data corruptions
> more easily) in making the kernel identity mapping to be set to
> read-only and enforce the need of RW only for the kernel data mappings.
>
> Or is there some obscure code that uses something like
> __va(__pa(data_symbol)) and writes to it?
>
> If not, we can remove the __pa() constructs above and use the addr for
> comparisons.

Done.
Patch V2 have been posted.