mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-14 12:49:08 +00:00
x86, vdso: Clean up 32-bit vs 64-bit vdso params
Rather than using 'vdso_enabled' and an awful #define, just call the parameters vdso32_enabled and vdso64_enabled. Signed-off-by: Andy Lutomirski <luto@amacapital.net> Link: http://lkml.kernel.org/r/87913de56bdcbae3d93917938302fc369b05caee.1399317206.git.luto@amacapital.net Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:
parent
73159fdcdb
commit
3d7ee969bf
@ -75,7 +75,12 @@ typedef struct user_fxsr_struct elf_fpxregset_t;
|
|||||||
|
|
||||||
#include <asm/vdso.h>
|
#include <asm/vdso.h>
|
||||||
|
|
||||||
extern unsigned int vdso_enabled;
|
#ifdef CONFIG_X86_64
|
||||||
|
extern unsigned int vdso64_enabled;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_X86_32) || defined(CONFIG_COMPAT)
|
||||||
|
extern unsigned int vdso32_enabled;
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is used to ensure we don't load something for the wrong architecture.
|
* This is used to ensure we don't load something for the wrong architecture.
|
||||||
@ -269,9 +274,9 @@ extern int force_personality32;
|
|||||||
|
|
||||||
struct task_struct;
|
struct task_struct;
|
||||||
|
|
||||||
#define ARCH_DLINFO_IA32(vdso_enabled) \
|
#define ARCH_DLINFO_IA32 \
|
||||||
do { \
|
do { \
|
||||||
if (vdso_enabled) { \
|
if (vdso32_enabled) { \
|
||||||
NEW_AUX_ENT(AT_SYSINFO, VDSO_ENTRY); \
|
NEW_AUX_ENT(AT_SYSINFO, VDSO_ENTRY); \
|
||||||
NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_CURRENT_BASE); \
|
NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_CURRENT_BASE); \
|
||||||
} \
|
} \
|
||||||
@ -281,7 +286,7 @@ do { \
|
|||||||
|
|
||||||
#define STACK_RND_MASK (0x7ff)
|
#define STACK_RND_MASK (0x7ff)
|
||||||
|
|
||||||
#define ARCH_DLINFO ARCH_DLINFO_IA32(vdso_enabled)
|
#define ARCH_DLINFO ARCH_DLINFO_IA32
|
||||||
|
|
||||||
/* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */
|
/* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */
|
||||||
|
|
||||||
@ -292,14 +297,15 @@ do { \
|
|||||||
|
|
||||||
#define ARCH_DLINFO \
|
#define ARCH_DLINFO \
|
||||||
do { \
|
do { \
|
||||||
if (vdso_enabled) \
|
if (vdso64_enabled) \
|
||||||
NEW_AUX_ENT(AT_SYSINFO_EHDR, \
|
NEW_AUX_ENT(AT_SYSINFO_EHDR, \
|
||||||
(unsigned long)current->mm->context.vdso); \
|
(unsigned long)current->mm->context.vdso); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/* As a historical oddity, the x32 and x86_64 vDSOs are controlled together. */
|
||||||
#define ARCH_DLINFO_X32 \
|
#define ARCH_DLINFO_X32 \
|
||||||
do { \
|
do { \
|
||||||
if (vdso_enabled) \
|
if (vdso64_enabled) \
|
||||||
NEW_AUX_ENT(AT_SYSINFO_EHDR, \
|
NEW_AUX_ENT(AT_SYSINFO_EHDR, \
|
||||||
(unsigned long)current->mm->context.vdso); \
|
(unsigned long)current->mm->context.vdso); \
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -310,7 +316,7 @@ do { \
|
|||||||
if (test_thread_flag(TIF_X32)) \
|
if (test_thread_flag(TIF_X32)) \
|
||||||
ARCH_DLINFO_X32; \
|
ARCH_DLINFO_X32; \
|
||||||
else \
|
else \
|
||||||
ARCH_DLINFO_IA32(sysctl_vsyscall32)
|
ARCH_DLINFO_IA32
|
||||||
|
|
||||||
#define COMPAT_ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x1000000)
|
#define COMPAT_ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x1000000)
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
|
||||||
unsigned int __read_mostly vdso_enabled = 1;
|
static unsigned int __read_mostly vdso_enabled = 1;
|
||||||
unsigned long um_vdso_addr;
|
unsigned long um_vdso_addr;
|
||||||
|
|
||||||
extern unsigned long task_size;
|
extern unsigned long task_size;
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
#define vdso_enabled sysctl_vsyscall32
|
|
||||||
#define arch_setup_additional_pages syscall32_setup_pages
|
#define arch_setup_additional_pages syscall32_setup_pages
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -45,13 +44,13 @@
|
|||||||
* Should the kernel map a VDSO page into processes and pass its
|
* Should the kernel map a VDSO page into processes and pass its
|
||||||
* address down to glibc upon exec()?
|
* address down to glibc upon exec()?
|
||||||
*/
|
*/
|
||||||
unsigned int __read_mostly vdso_enabled = VDSO_DEFAULT;
|
unsigned int __read_mostly vdso32_enabled = VDSO_DEFAULT;
|
||||||
|
|
||||||
static int __init vdso_setup(char *s)
|
static int __init vdso32_setup(char *s)
|
||||||
{
|
{
|
||||||
vdso_enabled = simple_strtoul(s, NULL, 0);
|
vdso32_enabled = simple_strtoul(s, NULL, 0);
|
||||||
|
|
||||||
if (vdso_enabled > 1)
|
if (vdso32_enabled > 1)
|
||||||
pr_warn("vdso32 values other than 0 and 1 are no longer allowed; vdso disabled\n");
|
pr_warn("vdso32 values other than 0 and 1 are no longer allowed; vdso disabled\n");
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -62,12 +61,10 @@ static int __init vdso_setup(char *s)
|
|||||||
* behavior on both 64-bit and 32-bit kernels.
|
* behavior on both 64-bit and 32-bit kernels.
|
||||||
* On 32-bit kernels, vdso=[012] means the same thing.
|
* On 32-bit kernels, vdso=[012] means the same thing.
|
||||||
*/
|
*/
|
||||||
__setup("vdso32=", vdso_setup);
|
__setup("vdso32=", vdso32_setup);
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
__setup_param("vdso=", vdso32_setup, vdso_setup, 0);
|
__setup_param("vdso=", vdso_setup, vdso32_setup, 0);
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(vdso_enabled);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct page **vdso32_pages;
|
static struct page **vdso32_pages;
|
||||||
@ -160,7 +157,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|
|||||||
return x32_setup_additional_pages(bprm, uses_interp);
|
return x32_setup_additional_pages(bprm, uses_interp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (vdso_enabled != 1) /* Other values all mean "disabled" */
|
if (vdso32_enabled != 1) /* Other values all mean "disabled" */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
down_write(&mm->mmap_sem);
|
down_write(&mm->mmap_sem);
|
||||||
@ -244,7 +241,7 @@ subsys_initcall(sysenter_setup);
|
|||||||
static struct ctl_table abi_table2[] = {
|
static struct ctl_table abi_table2[] = {
|
||||||
{
|
{
|
||||||
.procname = "vsyscall32",
|
.procname = "vsyscall32",
|
||||||
.data = &sysctl_vsyscall32,
|
.data = &vdso32_enabled,
|
||||||
.maxlen = sizeof(int),
|
.maxlen = sizeof(int),
|
||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.proc_handler = proc_dointvec
|
.proc_handler = proc_dointvec
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
|
||||||
#if defined(CONFIG_X86_64)
|
#if defined(CONFIG_X86_64)
|
||||||
unsigned int __read_mostly vdso_enabled = 1;
|
unsigned int __read_mostly vdso64_enabled = 1;
|
||||||
|
|
||||||
DECLARE_VDSO_IMAGE(vdso);
|
DECLARE_VDSO_IMAGE(vdso);
|
||||||
extern unsigned short vdso_sync_cpuid;
|
extern unsigned short vdso_sync_cpuid;
|
||||||
@ -160,7 +160,7 @@ static int setup_additional_pages(struct linux_binprm *bprm,
|
|||||||
unsigned long addr;
|
unsigned long addr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!vdso_enabled)
|
if (!vdso64_enabled)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
down_write(&mm->mmap_sem);
|
down_write(&mm->mmap_sem);
|
||||||
@ -203,7 +203,7 @@ int x32_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|
|||||||
|
|
||||||
static __init int vdso_setup(char *s)
|
static __init int vdso_setup(char *s)
|
||||||
{
|
{
|
||||||
vdso_enabled = simple_strtoul(s, NULL, 0);
|
vdso64_enabled = simple_strtoul(s, NULL, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
__setup("vdso=", vdso_setup);
|
__setup("vdso=", vdso_setup);
|
||||||
|
@ -1418,8 +1418,13 @@ static struct ctl_table vm_table[] = {
|
|||||||
(defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL))
|
(defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL))
|
||||||
{
|
{
|
||||||
.procname = "vdso_enabled",
|
.procname = "vdso_enabled",
|
||||||
|
#ifdef CONFIG_X86_32
|
||||||
|
.data = &vdso32_enabled,
|
||||||
|
.maxlen = sizeof(vdso32_enabled),
|
||||||
|
#else
|
||||||
.data = &vdso_enabled,
|
.data = &vdso_enabled,
|
||||||
.maxlen = sizeof(vdso_enabled),
|
.maxlen = sizeof(vdso_enabled),
|
||||||
|
#endif
|
||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.proc_handler = proc_dointvec,
|
.proc_handler = proc_dointvec,
|
||||||
.extra1 = &zero,
|
.extra1 = &zero,
|
||||||
|
Loading…
Reference in New Issue
Block a user