s390/vdso: always enable vdso
authorSven Schnelle <svens@linux.ibm.com>
Wed, 23 Jun 2021 12:10:00 +0000 (14:10 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Thu, 8 Jul 2021 13:37:28 +0000 (15:37 +0200)
With the upcoming move of the svc sigreturn instruction from
the signal frame to vdso we need to have vdso always enabled.

Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/elf.h
arch/s390/kernel/vdso.c

index 66d51ad090ab4209d365f994829d7aafc44a1306..6476655d7ce9c6043802ed46d1f62eeabe7e64d1 100644 (file)
@@ -146,8 +146,6 @@ typedef s390_compat_regs compat_elf_gregset_t;
 
 #include <asm/vdso.h>
 
-extern unsigned int vdso_enabled;
-
 /*
  * This is used to ensure we don't load something for the wrong architecture.
  */
@@ -268,11 +266,10 @@ do {                                                              \
 #define STACK_RND_MASK MMAP_RND_MASK
 
 /* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */
-#define ARCH_DLINFO                                                        \
-do {                                                                       \
-       if (vdso_enabled)                                                   \
-               NEW_AUX_ENT(AT_SYSINFO_EHDR,                                \
-                           (unsigned long)current->mm->context.vdso_base); \
+#define ARCH_DLINFO                                                    \
+do {                                                                   \
+       NEW_AUX_ENT(AT_SYSINFO_EHDR,                                    \
+                   (unsigned long)current->mm->context.vdso_base);     \
 } while (0)
 
 struct linux_binprm;
index 8c4e07d533c8db8aacefeaf3e1fe6f277e46f088..f786246e621ae7aa7943d8f0faf26ffb3d0b1023 100644 (file)
@@ -37,18 +37,6 @@ enum vvar_pages {
        VVAR_NR_PAGES,
 };
 
-unsigned int __read_mostly vdso_enabled = 1;
-
-static int __init vdso_setup(char *str)
-{
-       bool enabled;
-
-       if (!kstrtobool(str, &enabled))
-               vdso_enabled = enabled;
-       return 1;
-}
-__setup("vdso=", vdso_setup);
-
 #ifdef CONFIG_TIME_NS
 struct vdso_data *arch_get_vdso_data(void *vvar_page)
 {
@@ -176,7 +164,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
        int rc;
 
        BUILD_BUG_ON(VVAR_NR_PAGES != __VVAR_PAGES);
-       if (!vdso_enabled || is_compat_task())
+       if (is_compat_task())
                return 0;
        if (mmap_write_lock_killable(mm))
                return -EINTR;
@@ -218,10 +206,9 @@ static int __init vdso_init(void)
 
        vdso_pages = (vdso64_end - vdso64_start) >> PAGE_SHIFT;
        pages = kcalloc(vdso_pages + 1, sizeof(struct page *), GFP_KERNEL);
-       if (!pages) {
-               vdso_enabled = 0;
-               return -ENOMEM;
-       }
+       if (!pages)
+               panic("failed to allocate VDSO pages");
+
        for (i = 0; i < vdso_pages; i++)
                pages[i] = virt_to_page(vdso64_start + i * PAGE_SIZE);
        pages[vdso_pages] = NULL;