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

callchain.h (1081B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2#ifndef _POWERPC_PERF_CALLCHAIN_H
      3#define _POWERPC_PERF_CALLCHAIN_H
      4
      5void perf_callchain_user_64(struct perf_callchain_entry_ctx *entry,
      6			    struct pt_regs *regs);
      7void perf_callchain_user_32(struct perf_callchain_entry_ctx *entry,
      8			    struct pt_regs *regs);
      9
     10static inline bool invalid_user_sp(unsigned long sp)
     11{
     12	unsigned long mask = is_32bit_task() ? 3 : 7;
     13	unsigned long top = STACK_TOP - (is_32bit_task() ? 16 : 32);
     14
     15	return (!sp || (sp & mask) || (sp > top));
     16}
     17
     18/*
     19 * On 32-bit we just access the address and let hash_page create a
     20 * HPTE if necessary, so there is no need to fall back to reading
     21 * the page tables.  Since this is called at interrupt level,
     22 * do_page_fault() won't treat a DSI as a page fault.
     23 */
     24static inline int __read_user_stack(const void __user *ptr, void *ret,
     25				    size_t size)
     26{
     27	unsigned long addr = (unsigned long)ptr;
     28
     29	if (addr > TASK_SIZE - size || (addr & (size - 1)))
     30		return -EFAULT;
     31
     32	return copy_from_user_nofault(ret, ptr, size);
     33}
     34
     35#endif /* _POWERPC_PERF_CALLCHAIN_H */