This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Fix for heap overflow in wscanf (BZ 16618)


On Tue, Feb 03, 2015 at 11:24:08AM -0500, Carlos O'Donell wrote:
> On 02/02/2015 01:59 PM, Paul Pluzhnikov wrote:
> > On Mon, Feb 2, 2015 at 10:45 AM, Andreas Schwab <schwab@suse.de> wrote:
> >                  \
> >>> +               __set_errno (ENOMEM);                                     \
> >>
> >> You already have a meaningful errno from the failed realloc.
> > 
> > I see. And we are sure that "free(old)" will not touch errno?
> 
> Yes, free can never fail. If free were to touch errno it would be a bug,
> or would only happen in cases of undefined behaviour.

free can make a syscall that will set errno unless you suppress this
behavior -- munmap can fail due to inability to split an existing vma
due to hitting the vma limit or simply a kernel oom condition. In this
case I suspect you get the result you want, ENOMEM, anyway, but in
general if you want free to have a contract not to set errno, that
requires some attention, and it's almost surely not satisfied if
applications are allowed to replace free...

Rich


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]