Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 51
b: refs/heads/master
c: 547ee84
h: refs/heads/master
i:
  49: 57d3e71
  47: d741651
v: v3
  • Loading branch information
Benjamin Herrenschmidt authored and Linus Torvalds committed Apr 16, 2005
1 parent 59c5712 commit ee5177d
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: fa89c5092eddcbcb425a1416f85906e3cc519793
refs/heads/master: 547ee84cea37696d25c93306e909378a87db2f66
19 changes: 12 additions & 7 deletions trunk/arch/ppc64/kernel/vdso.c
Original file line number Diff line number Diff line change
Expand Up @@ -213,13 +213,14 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int executable_stack)
vdso_base = VDSO64_MBASE;
}

current->thread.vdso_base = 0;

/* vDSO has a problem and was disabled, just don't "enable" it for the
* process
*/
if (vdso_pages == 0) {
current->thread.vdso_base = 0;
if (vdso_pages == 0)
return 0;
}

vma = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
if (vma == NULL)
return -ENOMEM;
Expand All @@ -230,12 +231,16 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int executable_stack)
memset(vma, 0, sizeof(*vma));

/*
* pick a base address for the vDSO in process space. We have a default
* base of 1Mb on which we had a random offset up to 1Mb.
* XXX: Add possibility for a program header to specify that location
* pick a base address for the vDSO in process space. We try to put it
* at vdso_base which is the "natural" base for it, but we might fail
* and end up putting it elsewhere.
*/
vdso_base = get_unmapped_area(NULL, vdso_base,
vdso_pages << PAGE_SHIFT, 0, 0);
if (vdso_base & ~PAGE_MASK)
return (int)vdso_base;

current->thread.vdso_base = vdso_base;
/* + ((unsigned long)vma & 0x000ff000); */

vma->vm_mm = mm;
vma->vm_start = current->thread.vdso_base;
Expand Down
16 changes: 8 additions & 8 deletions trunk/fs/binfmt_elf.c
Original file line number Diff line number Diff line change
Expand Up @@ -782,14 +782,6 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
goto out_free_dentry;
}

#ifdef ARCH_HAS_SETUP_ADDITIONAL_PAGES
retval = arch_setup_additional_pages(bprm, executable_stack);
if (retval < 0) {
send_sig(SIGKILL, current, 0);
goto out_free_dentry;
}
#endif /* ARCH_HAS_SETUP_ADDITIONAL_PAGES */

current->mm->start_stack = bprm->p;

/* Now we do a little grungy work by mmaping the ELF image into
Expand Down Expand Up @@ -949,6 +941,14 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)

set_binfmt(&elf_format);

#ifdef ARCH_HAS_SETUP_ADDITIONAL_PAGES
retval = arch_setup_additional_pages(bprm, executable_stack);
if (retval < 0) {
send_sig(SIGKILL, current, 0);
goto out_free_dentry;
}
#endif /* ARCH_HAS_SETUP_ADDITIONAL_PAGES */

compute_creds(bprm);
current->flags &= ~PF_FORKNOEXEC;
create_elf_tables(bprm, &loc->elf_ex, (interpreter_type == INTERPRETER_AOUT),
Expand Down
8 changes: 4 additions & 4 deletions trunk/include/asm-ppc64/vdso.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
#ifdef __KERNEL__

/* Default link addresses for the vDSOs */
#define VDSO32_LBASE 0
#define VDSO64_LBASE 0
#define VDSO32_LBASE 0x100000
#define VDSO64_LBASE 0x100000

/* Default map addresses */
#define VDSO32_MBASE 0x100000
#define VDSO64_MBASE 0x100000
#define VDSO32_MBASE VDSO32_LBASE
#define VDSO64_MBASE VDSO64_LBASE

#define VDSO_VERSION_STRING LINUX_2.6.12

Expand Down

0 comments on commit ee5177d

Please sign in to comment.