root/arch/x86/entry/vdso/vdso32-setup.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. vdso32_setup
  2. sysenter_setup
  3. ia32_binfmt_init

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * (C) Copyright 2002 Linus Torvalds
   4  * Portions based on the vdso-randomization code from exec-shield:
   5  * Copyright(C) 2005-2006, Red Hat, Inc., Ingo Molnar
   6  *
   7  * This file contains the needed initializations to support sysenter.
   8  */
   9 
  10 #include <linux/init.h>
  11 #include <linux/smp.h>
  12 #include <linux/kernel.h>
  13 #include <linux/mm_types.h>
  14 #include <linux/elf.h>
  15 
  16 #include <asm/processor.h>
  17 #include <asm/vdso.h>
  18 
  19 #ifdef CONFIG_COMPAT_VDSO
  20 #define VDSO_DEFAULT    0
  21 #else
  22 #define VDSO_DEFAULT    1
  23 #endif
  24 
  25 /*
  26  * Should the kernel map a VDSO page into processes and pass its
  27  * address down to glibc upon exec()?
  28  */
  29 unsigned int __read_mostly vdso32_enabled = VDSO_DEFAULT;
  30 
  31 static int __init vdso32_setup(char *s)
  32 {
  33         vdso32_enabled = simple_strtoul(s, NULL, 0);
  34 
  35         if (vdso32_enabled > 1) {
  36                 pr_warn("vdso32 values other than 0 and 1 are no longer allowed; vdso disabled\n");
  37                 vdso32_enabled = 0;
  38         }
  39 
  40         return 1;
  41 }
  42 
  43 /*
  44  * For consistency, the argument vdso32=[012] affects the 32-bit vDSO
  45  * behavior on both 64-bit and 32-bit kernels.
  46  * On 32-bit kernels, vdso=[012] means the same thing.
  47  */
  48 __setup("vdso32=", vdso32_setup);
  49 
  50 #ifdef CONFIG_X86_32
  51 __setup_param("vdso=", vdso_setup, vdso32_setup, 0);
  52 #endif
  53 
  54 int __init sysenter_setup(void)
  55 {
  56         init_vdso_image(&vdso_image_32);
  57 
  58         return 0;
  59 }
  60 
  61 #ifdef CONFIG_X86_64
  62 
  63 subsys_initcall(sysenter_setup);
  64 
  65 #ifdef CONFIG_SYSCTL
  66 /* Register vsyscall32 into the ABI table */
  67 #include <linux/sysctl.h>
  68 
  69 static struct ctl_table abi_table2[] = {
  70         {
  71                 .procname       = "vsyscall32",
  72                 .data           = &vdso32_enabled,
  73                 .maxlen         = sizeof(int),
  74                 .mode           = 0644,
  75                 .proc_handler   = proc_dointvec_minmax,
  76                 .extra1         = SYSCTL_ZERO,
  77                 .extra2         = SYSCTL_ONE,
  78         },
  79         {}
  80 };
  81 
  82 static struct ctl_table abi_root_table2[] = {
  83         {
  84                 .procname = "abi",
  85                 .mode = 0555,
  86                 .child = abi_table2
  87         },
  88         {}
  89 };
  90 
  91 static __init int ia32_binfmt_init(void)
  92 {
  93         register_sysctl_table(abi_root_table2);
  94         return 0;
  95 }
  96 __initcall(ia32_binfmt_init);
  97 #endif /* CONFIG_SYSCTL */
  98 
  99 #endif  /* CONFIG_X86_64 */

/* [<][>][^][v][top][bottom][index][help] */