[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] elfload: use g_new instead of malloc
From: |
Markus Armbruster |
Subject: |
Re: [PATCH] elfload: use g_new instead of malloc |
Date: |
Fri, 02 Oct 2020 10:58:50 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) |
Thomas Huth <thuth@redhat.com> writes:
> On 02/10/2020 07.05, Markus Armbruster wrote:
>> Elena Afanasova <eafanasova@gmail.com> writes:
>>
>>> Signed-off-by: Elena Afanasova <eafanasova@gmail.com>
>>> ---
>>> bsd-user/elfload.c | 92 +++++++++++++++-------------------------------
>>> 1 file changed, 30 insertions(+), 62 deletions(-)
>>>
>>> diff --git a/bsd-user/elfload.c b/bsd-user/elfload.c
>>> index 32378af7b2..e10ca54eb7 100644
>>> --- a/bsd-user/elfload.c
>>> +++ b/bsd-user/elfload.c
>>> @@ -867,18 +867,14 @@ static abi_ulong load_elf_interp(struct elfhdr *
>>> interp_elf_ex,
>>> if (sizeof(struct elf_phdr) * interp_elf_ex->e_phnum >
>>> TARGET_PAGE_SIZE)
>>> return ~(abi_ulong)0UL;
>>>
>>> - elf_phdata = (struct elf_phdr *)
>>> - malloc(sizeof(struct elf_phdr) * interp_elf_ex->e_phnum);
>>> -
>>> - if (!elf_phdata)
>>> - return ~((abi_ulong)0UL);
>>> + elf_phdata = g_new(struct elf_phdr, interp_elf_ex->e_phnum);
>>>
>>> /*
>>> * If the size of this structure has changed, then punt, since
>>> * we will be doing the wrong thing.
>>> */
>>> if (interp_elf_ex->e_phentsize != sizeof(struct elf_phdr)) {
>>> - free(elf_phdata);
>>> + g_free(elf_phdata);
>>> return ~((abi_ulong)0UL);
>>> }
>>>
>>> @@ -890,9 +886,8 @@ static abi_ulong load_elf_interp(struct elfhdr *
>>> interp_elf_ex,
>>> }
>>> if (retval < 0) {
>>> perror("load_elf_interp");
>>> + g_free(elf_phdata);
>>> exit(-1);
>>> - free (elf_phdata);
>>> - return retval;
>>
>> Deleting return looks wrong.
>
> Why? There is an exit(-1) right in front of it, so this is dead code...
> well, maybe that should be done in a separate patch, or at least
> mentioned in the patch description, though.
You're right; I missed the exit(-1).
Following the unpleasant odour spread by exit(-1)... Aha, the
function's behavior on error is inconsistent: sometimes it returns zero,
sometimes it exits.
Since the problem is bigger than just one dead return, I recommend
leaving it to a separate patch, and keeping this one focused on g_new().
- [PATCH] elfload: use g_new instead of malloc, Elena Afanasova, 2020/10/01
- Re: [PATCH] elfload: use g_new instead of malloc, Thomas Huth, 2020/10/01
- Re: [PATCH] elfload: use g_new instead of malloc, Markus Armbruster, 2020/10/02
- Re: [PATCH] elfload: use g_new instead of malloc, Thomas Huth, 2020/10/02
- Re: [PATCH] elfload: use g_new instead of malloc,
Markus Armbruster <=
- Re: [PATCH] elfload: use g_new instead of malloc, Eric Blake, 2020/10/02
- Re: [PATCH v2] elfload: use g_new/g_malloc and g_autofree, Elena Afanasova, 2020/10/04
- Re: [PATCH v2] elfload: use g_new/g_malloc and g_autofree, Markus Armbruster, 2020/10/05
- Re: [PATCH v2] elfload: use g_new/g_malloc and g_autofree, Peter Maydell, 2020/10/05
- Re: [PATCH v2] elfload: use g_new/g_malloc and g_autofree, Elena Afanasova, 2020/10/06