strtok behaviour when uninitialized

Florian Weimer fweimer@redhat.com
Mon Feb 19 11:04:00 GMT 2018


On 02/12/2018 01:09 AM, Rich Felker wrote:
> On Sun, Feb 11, 2018 at 06:06:41PM -0500, Zack Weinberg wrote:
>> On Sun, Feb 11, 2018 at 4:05 PM, Florian Weimer<fweimer@redhat.com>  wrote:
>>> On 02/11/2018 08:32 PM, Zack Weinberg wrote:
>>>> With my security hat on, I would like glibc to define as many cases of
>>>> undefined behavior as possible -- as prompt, guaranteed crashes.
>>>> Defining the behavior as anything else leads to people relying on
>>>> whatever the definition is, but leaving it as "whatever the code
>>>> happens to do"_also_   leads to people relying on the actual behavior,
>>>> plus it leaves room for exploits.
>>> But in the case of strtok, the more relevant undefined behavior is that it's
>>> not thread-safe.  There's a fairly large number of libraries which reference
>>> both pthread_create and strtok, which is rather sad.
>> I don't particularly like saying this, but I think the only defensive
>> measure that wouldn't cause more problems than it solves would be to
>> make the persistent state for strtok be thread-local.

> This is actually not permitted by the C language as specified. Under
> 7.24.5.8 The strtok function, all of the language is about "The first
> call in the sequence" and "subsequent calls"; no requirement that
> these calls happen in the same thread is made.

I suspect that this is just an oversight.  Surely the intent was not to 
make the existing strtok implementation in Solaris non-compliant when 
threads were introduced in C11.

I will try to figure out how to raise a defect report.

Thanks,
Florian



More information about the Libc-alpha mailing list