[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] x86: put_page_from_l2e() should honor _PAGE_RW



On Tue, Oct 09, 2018 at 12:43:05AM -0600, Jan Beulich wrote:
> 56fff3e5e9 ("x86: nuke PV superpage option and code") has introduced a
> (luckily latent only) bug here, in that it didn't make reference

It seems that the bug was from the original superpage code -- see
put_spage_pages.

> dropping dependent on whether the page was mapped writable. The only
> current source of large page mappings for PV domains is the Dom0
> builder, which only produces writeable ones.
> 
> Take the opportunity and also convert to bool both put_data_page()'s
> respective parameter and the argument put_page_from_l3e() passes.
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx>

> 
> --- a/xen/arch/x86/mm.c
> +++ b/xen/arch/x86/mm.c
> @@ -663,8 +663,7 @@ static int get_page_and_type_from_mfn(
>      return rc;
>  }
>  
> -static void put_data_page(
> -    struct page_info *page, int writeable)
> +static void put_data_page(struct page_info *page, bool writeable)
>  {
>      if ( writeable )
>          put_page_and_type(page);
> @@ -1289,10 +1288,13 @@ static int put_page_from_l2e(l2_pgentry_
>      if ( l2e_get_flags(l2e) & _PAGE_PSE )
>      {
>          struct page_info *page = l2e_get_page(l2e);
> +        bool writeable = l2e_get_flags(l2e) & _PAGE_RW;
>          unsigned int i;
>  
> +        ASSERT(!(mfn_x(page_to_mfn(page)) &
> +                 ((1UL << (L2_PAGETABLE_SHIFT - PAGE_SHIFT)) - 1)));
>          for ( i = 0; i < (1u << PAGETABLE_ORDER); i++, page++ )
> -            put_page_and_type(page);
> +            put_data_page(page, writeable);
>      }
>      else
>      {
> @@ -1318,7 +1320,7 @@ static int put_page_from_l3e(l3_pgentry_
>      if ( unlikely(l3e_get_flags(l3e) & _PAGE_PSE) )
>      {
>          unsigned long mfn = l3e_get_pfn(l3e);
> -        int writeable = l3e_get_flags(l3e) & _PAGE_RW;
> +        bool writeable = l3e_get_flags(l3e) & _PAGE_RW;
>  
>          ASSERT(!(mfn & ((1UL << (L3_PAGETABLE_SHIFT - PAGE_SHIFT)) - 1)));
>          do {
> 
> 
> 
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.