struct vm_special_mapping *cm;
 };
 
+static struct __vdso_info vdso_info;
+#ifdef CONFIG_COMPAT
+static struct __vdso_info compat_vdso_info;
+#endif
+
 static int vdso_mremap(const struct vm_special_mapping *sm,
                       struct vm_area_struct *new_vma)
 {
 {
        struct mm_struct *mm = task->mm;
        struct vm_area_struct *vma;
-       struct __vdso_info *vdso_info = mm->context.vdso_info;
 
        mmap_read_lock(mm);
 
        for (vma = mm->mmap; vma; vma = vma->vm_next) {
                unsigned long size = vma->vm_end - vma->vm_start;
 
-               if (vma_is_special_mapping(vma, vdso_info->dm))
+               if (vma_is_special_mapping(vma, vdso_info.dm))
                        zap_page_range(vma, vma->vm_start, size);
+#ifdef CONFIG_COMPAT
+               if (vma_is_special_mapping(vma, compat_vdso_info.dm))
+                       zap_page_range(vma, vma->vm_start, size);
+#endif
        }
 
        mmap_read_unlock(mm);
 
        vdso_base += VVAR_SIZE;
        mm->context.vdso = (void *)vdso_base;
-       mm->context.vdso_info = (void *)vdso_info;
 
        ret =
           _install_special_mapping(mm, vdso_base, vdso_text_len,