Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 165690
b: refs/heads/master
c: 0cf062d
h: refs/heads/master
v: v3
  • Loading branch information
Amerigo Wang authored and Linus Torvalds committed Sep 24, 2009
1 parent 99fd403 commit 6586712
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 23 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: d9588725e52650e82989707f8fd2feb67ad2dc8e
refs/heads/master: 0cf062d0ffa33d491e2695b0d298ccf9cbb58d3d
52 changes: 30 additions & 22 deletions trunk/fs/binfmt_elf.c
Original file line number Diff line number Diff line change
Expand Up @@ -1711,42 +1711,52 @@ struct elf_note_info {
int numnote;
};

static int fill_note_info(struct elfhdr *elf, int phdrs,
struct elf_note_info *info,
long signr, struct pt_regs *regs)
static int elf_note_info_init(struct elf_note_info *info)
{
#define NUM_NOTES 6
struct list_head *t;

info->notes = NULL;
info->prstatus = NULL;
info->psinfo = NULL;
info->fpu = NULL;
#ifdef ELF_CORE_COPY_XFPREGS
info->xfpu = NULL;
#endif
memset(info, 0, sizeof(*info));
INIT_LIST_HEAD(&info->thread_list);

info->notes = kmalloc(NUM_NOTES * sizeof(struct memelfnote),
GFP_KERNEL);
/* Allocate space for six ELF notes */
info->notes = kmalloc(6 * sizeof(struct memelfnote), GFP_KERNEL);
if (!info->notes)
return 0;
info->psinfo = kmalloc(sizeof(*info->psinfo), GFP_KERNEL);
if (!info->psinfo)
return 0;
goto notes_free;
info->prstatus = kmalloc(sizeof(*info->prstatus), GFP_KERNEL);
if (!info->prstatus)
return 0;
goto psinfo_free;
info->fpu = kmalloc(sizeof(*info->fpu), GFP_KERNEL);
if (!info->fpu)
return 0;
goto prstatus_free;
#ifdef ELF_CORE_COPY_XFPREGS
info->xfpu = kmalloc(sizeof(*info->xfpu), GFP_KERNEL);
if (!info->xfpu)
return 0;
goto fpu_free;
#endif
return 1;
#ifdef ELF_CORE_COPY_XFPREGS
fpu_free:
kfree(info->fpu);
#endif
prstatus_free:
kfree(info->prstatus);
psinfo_free:
kfree(info->psinfo);
notes_free:
kfree(info->notes);
return 0;
}

static int fill_note_info(struct elfhdr *elf, int phdrs,
struct elf_note_info *info,
long signr, struct pt_regs *regs)
{
struct list_head *t;

if (!elf_note_info_init(info))
return 0;

info->thread_status_size = 0;
if (signr) {
struct core_thread *ct;
struct elf_thread_status *ets;
Expand Down Expand Up @@ -1806,8 +1816,6 @@ static int fill_note_info(struct elfhdr *elf, int phdrs,
#endif

return 1;

#undef NUM_NOTES
}

static size_t get_note_info_size(struct elf_note_info *info)
Expand Down

0 comments on commit 6586712

Please sign in to comment.