[PATCH] libio: Fix open_memstream flush (NULL)

Florian Weimer fw@deneb.enyo.de
Wed Jul 12 15:01:00 GMT 2017


* Adhemerval Zanella:

>> I think we don't want the malloc call for a call to exit, either.
>> Similarly for __stack_chk_fail, but that's something we need to fix
>> there.
>
> I am not following, what exactly should not call malloc here? Since
> the open_memstream is a valid call, it will allocate both the initial
> internal FILE object (libio/memstream.c:77) and initial buffer 
> (libio/memstream.c:84). Are you saying that we should start with an
> empty buffer instead? If it is the for I think we can do it, but it
> would require more intrusive changes I think.

I think we should make sure that writing the null terminator does not
trigger malloc during abort (or __stack_chk_fail).  That would be
quite wrong IMHO.

I wasn't aware that the buffer is pre-allocated.  Then we probably
need a test which is aware of the size of the preallocated buffer.

> So do you prefer to just add a workaround to disable the single-thread
> optimization for open_memstream and fix it on 2.27?  IMHO this fix touches
> only the open_memstream itself, so it should not regress any other libio
> code so I would prefer than carry a workaround for 2.26.

Which fix?  Linking open_memstream into the global list has quite
far-reaching consequences.  Conservatively setting the flag instead
should be fine.

I'm also not sure that the intent of POSIX is that open_memstream
streams should be affected by fflush (NULL).  I expect that
open_memstream was added without considering the interaction with
fflush (NULL).



More information about the Libc-alpha mailing list