source: src/linux/universal/linux-4.9/arch/x86/entry/vdso/vdso32-setup.c @ 31885

Last change on this file since 31885 was 31885, checked in by brainslayer, 5 weeks ago

update

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