new_pmd = kvm_s2pmd_mkwrite(new_pmd);
                        kvm_set_pfn_dirty(pfn);
                }
-               clean_dcache_guest_page(vcpu, pfn, PMD_SIZE);
+
+               if (fault_status != FSC_PERM)
+                       clean_dcache_guest_page(vcpu, pfn, PMD_SIZE);
 
                if (exec_fault) {
                        new_pmd = kvm_s2pmd_mkexec(new_pmd);
                        kvm_set_pfn_dirty(pfn);
                        mark_page_dirty(kvm, gfn);
                }
-               clean_dcache_guest_page(vcpu, pfn, PAGE_SIZE);
+
+               if (fault_status != FSC_PERM)
+                       clean_dcache_guest_page(vcpu, pfn, PAGE_SIZE);
 
                if (exec_fault) {
                        new_pte = kvm_s2pte_mkexec(new_pte);