cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mman.h (1693B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __ASM_MMAN_H__
      3#define __ASM_MMAN_H__
      4
      5#include <linux/compiler.h>
      6#include <linux/types.h>
      7#include <uapi/asm/mman.h>
      8
      9static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot,
     10	unsigned long pkey __always_unused)
     11{
     12	unsigned long ret = 0;
     13
     14	if (system_supports_bti() && (prot & PROT_BTI))
     15		ret |= VM_ARM64_BTI;
     16
     17	if (system_supports_mte() && (prot & PROT_MTE))
     18		ret |= VM_MTE;
     19
     20	return ret;
     21}
     22#define arch_calc_vm_prot_bits(prot, pkey) arch_calc_vm_prot_bits(prot, pkey)
     23
     24static inline unsigned long arch_calc_vm_flag_bits(unsigned long flags)
     25{
     26	/*
     27	 * Only allow MTE on anonymous mappings as these are guaranteed to be
     28	 * backed by tags-capable memory. The vm_flags may be overridden by a
     29	 * filesystem supporting MTE (RAM-based).
     30	 */
     31	if (system_supports_mte() && (flags & MAP_ANONYMOUS))
     32		return VM_MTE_ALLOWED;
     33
     34	return 0;
     35}
     36#define arch_calc_vm_flag_bits(flags) arch_calc_vm_flag_bits(flags)
     37
     38static inline bool arch_validate_prot(unsigned long prot,
     39	unsigned long addr __always_unused)
     40{
     41	unsigned long supported = PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM;
     42
     43	if (system_supports_bti())
     44		supported |= PROT_BTI;
     45
     46	if (system_supports_mte())
     47		supported |= PROT_MTE;
     48
     49	return (prot & ~supported) == 0;
     50}
     51#define arch_validate_prot(prot, addr) arch_validate_prot(prot, addr)
     52
     53static inline bool arch_validate_flags(unsigned long vm_flags)
     54{
     55	if (!system_supports_mte())
     56		return true;
     57
     58	/* only allow VM_MTE if VM_MTE_ALLOWED has been set previously */
     59	return !(vm_flags & VM_MTE) || (vm_flags & VM_MTE_ALLOWED);
     60}
     61#define arch_validate_flags(vm_flags) arch_validate_flags(vm_flags)
     62
     63#endif /* ! __ASM_MMAN_H__ */