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

vvar.h (1591B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * vvar.h: Shared vDSO/kernel variable declarations
      4 * Copyright (c) 2011 Andy Lutomirski
      5 *
      6 * A handful of variables are accessible (read-only) from userspace
      7 * code in the vsyscall page and the vdso.  They are declared here.
      8 * Some other file must define them with DEFINE_VVAR.
      9 *
     10 * In normal kernel code, they are used like any other variable.
     11 * In user code, they are accessed through the VVAR macro.
     12 *
     13 * These variables live in a page of kernel data that has an extra RO
     14 * mapping for userspace.  Each variable needs a unique offset within
     15 * that page; specify that offset with the DECLARE_VVAR macro.  (If
     16 * you mess up, the linker will catch it.)
     17 */
     18
     19#ifndef _ASM_X86_VVAR_H
     20#define _ASM_X86_VVAR_H
     21
     22#ifdef EMIT_VVAR
     23/*
     24 * EMIT_VVAR() is used by the kernel linker script to put vvars in the
     25 * right place. Also, it's used by kernel code to import offsets values.
     26 */
     27#define DECLARE_VVAR(offset, type, name) \
     28	EMIT_VVAR(name, offset)
     29
     30#else
     31
     32extern char __vvar_page;
     33
     34#define DECLARE_VVAR(offset, type, name)				\
     35	extern type vvar_ ## name[CS_BASES]				\
     36	__attribute__((visibility("hidden")));				\
     37	extern type timens_ ## name[CS_BASES]				\
     38	__attribute__((visibility("hidden")));				\
     39
     40#define VVAR(name) (vvar_ ## name)
     41#define TIMENS(name) (timens_ ## name)
     42
     43#define DEFINE_VVAR(type, name)						\
     44	type name[CS_BASES]						\
     45	__attribute__((section(".vvar_" #name), aligned(16))) __visible
     46
     47#endif
     48
     49/* DECLARE_VVAR(offset, type, name) */
     50
     51DECLARE_VVAR(128, struct vdso_data, _vdso_data)
     52
     53#undef DECLARE_VVAR
     54
     55#endif