kfence.h (865B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * PA-RISC KFENCE support. 4 * 5 * Copyright (C) 2021, Helge Deller <deller@gmx.de> 6 */ 7 8#ifndef _ASM_PARISC_KFENCE_H 9#define _ASM_PARISC_KFENCE_H 10 11#include <linux/kfence.h> 12 13#include <asm/pgtable.h> 14#include <asm/tlbflush.h> 15 16static inline bool arch_kfence_init_pool(void) 17{ 18 return true; 19} 20 21/* Protect the given page and flush TLB. */ 22static inline bool kfence_protect_page(unsigned long addr, bool protect) 23{ 24 pte_t *pte = virt_to_kpte(addr); 25 26 if (WARN_ON(!pte)) 27 return false; 28 29 /* 30 * We need to avoid IPIs, as we may get KFENCE allocations or faults 31 * with interrupts disabled. 32 */ 33 34 if (protect) 35 set_pte(pte, __pte(pte_val(*pte) & ~_PAGE_PRESENT)); 36 else 37 set_pte(pte, __pte(pte_val(*pte) | _PAGE_PRESENT)); 38 39 flush_tlb_kernel_range(addr, addr + PAGE_SIZE); 40 41 return true; 42} 43 44#endif /* _ASM_PARISC_KFENCE_H */