Author: zbb
Date: Tue Nov 19 23:31:39 2013
New Revision: 258358
URL: http://svnweb.freebsd.org/changeset/base/258358

Log:
  Avoid clearing EXEC permission bit when setting the page RW on ARMv6/v7
  
  When emulating modified bit the executable attribute was cleared by
  mistake when calling pmap_set_prot(). This was not a problem before
  changes to ref/mod emulation since all the pages were created RW basing
  on the "prot" argument in pmap_enter(). Now however not all pages are RW
  and the RW permission can be cleared in the process.
  
  Added proper KTRs accordingly.
  
  Spotted by:   cognet
  Reviewed by:  gber

Modified:
  head/sys/arm/arm/pmap-v6.c

Modified: head/sys/arm/arm/pmap-v6.c
==============================================================================
--- head/sys/arm/arm/pmap-v6.c  Tue Nov 19 22:55:17 2013        (r258357)
+++ head/sys/arm/arm/pmap-v6.c  Tue Nov 19 23:31:39 2013        (r258358)
@@ -1519,10 +1519,10 @@ pmap_fault_fixup(pmap_t pmap, vm_offset_
                vm_page_dirty(m);
 
                /* Re-enable write permissions for the page */
-               pmap_set_prot(ptep, VM_PROT_WRITE, *ptep & L2_S_PROT_U);
-               CTR1(KTR_PMAP, "pmap_fault_fix: new pte:0x%x", pte);
+               *ptep = (pte & ~L2_APX);
                PTE_SYNC(ptep);
                rv = 1;
+               CTR1(KTR_PMAP, "pmap_fault_fix: new pte:0x%x", *ptep);
        } else if (!L2_S_REFERENCED(pte)) {
                /*
                 * This looks like a good candidate for "page referenced"
@@ -1545,6 +1545,7 @@ pmap_fault_fixup(pmap_t pmap, vm_offset_
                *ptep = pte | L2_S_REF;
                PTE_SYNC(ptep);
                rv = 1;
+               CTR1(KTR_PMAP, "pmap_fault_fix: new pte:0x%x", *ptep);
        }
 
        /*
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to