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

error-injection.h (1161B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _ASM_GENERIC_ERROR_INJECTION_H
      3#define _ASM_GENERIC_ERROR_INJECTION_H
      4
      5#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
      6enum {
      7	EI_ETYPE_NONE,		/* Dummy value for undefined case */
      8	EI_ETYPE_NULL,		/* Return NULL if failure */
      9	EI_ETYPE_ERRNO,		/* Return -ERRNO if failure */
     10	EI_ETYPE_ERRNO_NULL,	/* Return -ERRNO or NULL if failure */
     11	EI_ETYPE_TRUE,		/* Return true if failure */
     12};
     13
     14struct error_injection_entry {
     15	unsigned long	addr;
     16	int		etype;
     17};
     18
     19struct pt_regs;
     20
     21#ifdef CONFIG_FUNCTION_ERROR_INJECTION
     22/*
     23 * Whitelist generating macro. Specify functions which can be
     24 * error-injectable using this macro.
     25 */
     26#define ALLOW_ERROR_INJECTION(fname, _etype)				\
     27static struct error_injection_entry __used				\
     28	__section("_error_injection_whitelist")				\
     29	_eil_addr_##fname = {						\
     30		.addr = (unsigned long)fname,				\
     31		.etype = EI_ETYPE_##_etype,				\
     32	}
     33
     34void override_function_with_return(struct pt_regs *regs);
     35#else
     36#define ALLOW_ERROR_INJECTION(fname, _etype)
     37
     38static inline void override_function_with_return(struct pt_regs *regs) { }
     39#endif
     40#endif
     41
     42#endif /* _ASM_GENERIC_ERROR_INJECTION_H */