bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] vasnprintf: fix potential use after free


From: Pádraig Brady
Subject: Re: [PATCH] vasnprintf: fix potential use after free
Date: Sun, 07 Dec 2014 00:44:18 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0

On 06/12/14 16:06, Pádraig Brady wrote:
> On 06/12/14 02:46, Eric Blake wrote:
>> On 12/05/2014 06:23 PM, Pádraig Brady wrote:
>>> * lib/vasnprintf.c (VASNPRINTF): Fix free-memory read,
>>> flagged by clang-analyzer 3.4.2.
>>> ---
>>>  ChangeLog        | 6 ++++++
>>>  lib/vasnprintf.c | 2 +-
>>>  2 files changed, 7 insertions(+), 1 deletion(-)
>>>
>>
>>> +++ b/lib/vasnprintf.c
>>> @@ -5184,13 +5184,13 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
>>>                            free (result);
>>>                          if (buf_malloced != NULL)
>>>                            free (buf_malloced);
>>> -                        CLEANUP ();
>>>                          errno =
>>>                            (saved_errno != 0
>>>                             ? saved_errno
>>>                             : (dp->conversion == 'c' || dp->conversion == 
>>> 's'
>>>                                ? EILSEQ
>>>                                : EINVAL));
>>> +                        CLEANUP ();
>>
>> Ouch.  This is a bug.  The whole point of assigning to errno after
>> CLEANUP() is that CLEANUP() may invalidate the value stored in errno.
>>
>> I suggest doing something like:
>>
>> if (saved_errno == 0)
>>   saved_errno = dp->conversion == 'c' || dp->conversion == 's'
>>     ? EILSEQ : EINVAL;
>> CLEANUP();
>> errno = saved_errno;
> 
> Oh right, I did think about it and looked at:
> http://austingroupbugs.net/view.php?id=385
> but jumped to the wrong conclusion that the updated standard
> was just documenting existing practise.

BTW if free() may reset errno on some platforms then it's
probably worth augmenting the gnulib free() wrapper
to restore errno if needed, rather than worrying about
this sort of stuff everywhere.

cheers,
Pádraig.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]