diff options
author | Helge Deller <deller@gmx.de> | 2021-10-09 23:21:49 +0300 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2021-10-31 00:11:00 +0300 |
commit | ec5c115050f59114e216212837f1c1ebc54bdfc9 (patch) | |
tree | 8ad26dd52d20103662d44efbe69066391b338547 /arch/parisc/include | |
parent | aeb1e833a4c38efffad9556cf7f458c4e5de5b45 (diff) | |
download | linux-ec5c115050f59114e216212837f1c1ebc54bdfc9.tar.xz |
parisc: Add KFENCE support
Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'arch/parisc/include')
-rw-r--r-- | arch/parisc/include/asm/kfence.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/arch/parisc/include/asm/kfence.h b/arch/parisc/include/asm/kfence.h new file mode 100644 index 000000000000..6259e5ac1fea --- /dev/null +++ b/arch/parisc/include/asm/kfence.h @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * PA-RISC KFENCE support. + * + * Copyright (C) 2021, Helge Deller <deller@gmx.de> + */ + +#ifndef _ASM_PARISC_KFENCE_H +#define _ASM_PARISC_KFENCE_H + +#include <linux/kfence.h> + +#include <asm/pgtable.h> +#include <asm/tlbflush.h> + +static inline bool arch_kfence_init_pool(void) +{ + return true; +} + +/* Protect the given page and flush TLB. */ +static inline bool kfence_protect_page(unsigned long addr, bool protect) +{ + pte_t *pte = virt_to_kpte(addr); + + if (WARN_ON(!pte)) + return false; + + /* + * We need to avoid IPIs, as we may get KFENCE allocations or faults + * with interrupts disabled. + */ + + if (protect) + set_pte(pte, __pte(pte_val(*pte) & ~_PAGE_PRESENT)); + else + set_pte(pte, __pte(pte_val(*pte) | _PAGE_PRESENT)); + + flush_tlb_kernel_range(addr, addr + PAGE_SIZE); + + return true; +} + +#endif /* _ASM_PARISC_KFENCE_H */ |