1
2
3
4
5
6
7
8
9
10#include <linux/init.h>
11#include <linux/smp.h>
12#include <linux/kernel.h>
13#include <linux/mm_types.h>
14
15#include <asm/processor.h>
16#include <asm/vdso.h>
17
18#ifdef CONFIG_COMPAT_VDSO
19#define VDSO_DEFAULT 0
20#else
21#define VDSO_DEFAULT 1
22#endif
23
24
25
26
27
28unsigned int __read_mostly vdso32_enabled = VDSO_DEFAULT;
29
30static int __init vdso32_setup(char *s)
31{
32 vdso32_enabled = simple_strtoul(s, NULL, 0);
33
34 if (vdso32_enabled > 1) {
35 pr_warn("vdso32 values other than 0 and 1 are no longer allowed; vdso disabled\n");
36 vdso32_enabled = 0;
37 }
38
39 return 1;
40}
41
42
43
44
45
46
47__setup("vdso32=", vdso32_setup);
48
49#ifdef CONFIG_X86_32
50__setup_param("vdso=", vdso_setup, vdso32_setup, 0);
51#endif
52
53int __init sysenter_setup(void)
54{
55 init_vdso_image(&vdso_image_32);
56
57 return 0;
58}
59
60#ifdef CONFIG_X86_64
61
62subsys_initcall(sysenter_setup);
63
64#ifdef CONFIG_SYSCTL
65
66#include <linux/sysctl.h>
67
68static struct ctl_table abi_table2[] = {
69 {
70 .procname = "vsyscall32",
71 .data = &vdso32_enabled,
72 .maxlen = sizeof(int),
73 .mode = 0644,
74 .proc_handler = proc_dointvec_minmax,
75 .extra1 = SYSCTL_ZERO,
76 .extra2 = SYSCTL_ONE,
77 },
78 {}
79};
80
81static struct ctl_table abi_root_table2[] = {
82 {
83 .procname = "abi",
84 .mode = 0555,
85 .child = abi_table2
86 },
87 {}
88};
89
90static __init int ia32_binfmt_init(void)
91{
92 register_sysctl_table(abi_root_table2);
93 return 0;
94}
95__initcall(ia32_binfmt_init);
96#endif
97
98#endif
99