|
@@ -100,11 +100,20 @@ pgprot_t protection_map[16] __ro_after_init = {
|
|
|
__S000, __S001, __S010, __S011, __S100, __S101, __S110, __S111
|
|
|
};
|
|
|
|
|
|
+#ifndef CONFIG_ARCH_HAS_FILTER_PGPROT
|
|
|
+static inline pgprot_t arch_filter_pgprot(pgprot_t prot)
|
|
|
+{
|
|
|
+ return prot;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
pgprot_t vm_get_page_prot(unsigned long vm_flags)
|
|
|
{
|
|
|
- return __pgprot(pgprot_val(protection_map[vm_flags &
|
|
|
+ pgprot_t ret = __pgprot(pgprot_val(protection_map[vm_flags &
|
|
|
(VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]) |
|
|
|
pgprot_val(arch_vm_get_page_prot(vm_flags)));
|
|
|
+
|
|
|
+ return arch_filter_pgprot(ret);
|
|
|
}
|
|
|
EXPORT_SYMBOL(vm_get_page_prot);
|
|
|
|