Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 199814
b: refs/heads/master
c: 2e94de8
h: refs/heads/master
v: v3
  • Loading branch information
Mike Frysinger authored and Linus Torvalds committed Jun 4, 2010
1 parent 3e139e3 commit 385fa2f
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 9 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: 55adaa495edc429be84399f83df80dfb7f36598b
refs/heads/master: 2e94de8acbe524d919f1ea8807913d7b005e1578
23 changes: 15 additions & 8 deletions trunk/fs/binfmt_flat.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,22 @@
#endif

/*
* User data (stack, data section and bss) needs to be aligned
* for the same reasons as SLAB memory is, and to the same amount.
* Avoid duplicating architecture specific code by using the same
* macro as with SLAB allocation:
* User data (data section and bss) needs to be aligned.
* We pick 0x20 here because it is the max value elf2flt has always
* used in producing FLAT files, and because it seems to be large
* enough to make all the gcc alignment related tests happy.
*/
#define FLAT_DATA_ALIGN (0x20)

/*
* User data (stack) also needs to be aligned.
* Here we can be a bit looser than the data sections since this
* needs to only meet arch ABI requirements.
*/
#ifdef ARCH_SLAB_MINALIGN
#define FLAT_DATA_ALIGN (ARCH_SLAB_MINALIGN)
#define FLAT_STACK_ALIGN (ARCH_SLAB_MINALIGN)
#else
#define FLAT_DATA_ALIGN (sizeof(void *))
#define FLAT_STACK_ALIGN (sizeof(void *))
#endif

#define RELOC_FAILED 0xff00ff01 /* Relocation incorrect somewhere */
Expand Down Expand Up @@ -129,7 +136,7 @@ static unsigned long create_flat_tables(

sp = (unsigned long *)p;
sp -= (envc + argc + 2) + 1 + (flat_argvp_envp_on_stack() ? 2 : 0);
sp = (unsigned long *) ((unsigned long)sp & -FLAT_DATA_ALIGN);
sp = (unsigned long *) ((unsigned long)sp & -FLAT_STACK_ALIGN);
argv = sp + 1 + (flat_argvp_envp_on_stack() ? 2 : 0);
envp = argv + (argc + 1);

Expand Down Expand Up @@ -876,7 +883,7 @@ static int load_flat_binary(struct linux_binprm * bprm, struct pt_regs * regs)
stack_len = TOP_OF_ARGS - bprm->p; /* the strings */
stack_len += (bprm->argc + 1) * sizeof(char *); /* the argv array */
stack_len += (bprm->envc + 1) * sizeof(char *); /* the envp array */
stack_len += FLAT_DATA_ALIGN - 1; /* reserve for upcoming alignment */
stack_len += FLAT_STACK_ALIGN - 1; /* reserve for upcoming alignment */

res = load_flat_file(bprm, &libinfo, 0, &stack_len);
if (IS_ERR_VALUE(res))
Expand Down

0 comments on commit 385fa2f

Please sign in to comment.