Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Sat, 11 Feb 2017 19:02:39 -0500
From: Rich Felker <>
Subject: Re: behavior errata

On Sat, Feb 11, 2017 at 05:28:37PM -0600, wrote:
> While debugging an issue where a child process’s errno was getting
> clobbered, discovered that musl was doing the clobbering in a call
> to strftime (that did NOT fail).
> I understand the contract of libc calls is that errno can be
> clobbered at any time. However, it’s a behavior difference between
> musl and other libc’s that I have tested against.
> Here’s the repro code. 
> I had a nice chat with some folks on IRC about this. They indicated
> that it might get “fixed” just to be nice but there is no
> requirement to do so. Someone even made the (evil but funny)
> suggestion that musl should clobber errno between every non-failing
> call just to see how much code in the wild would explode. Please
> don’t. :)
> Thanks for your attention.

Hi. Indeed, errno is only meaningful after a function that returns an
error and sets it. Most other functions, except a few explicitly
specified not to, can clobber errno with any nonzero value.

While the above behavior might change (especially if it's found that
we're doing a wasteful operation that's causing errno to be set), musl
will never guarantee non-clobbering of errno in cases where it's
allowed to be clobbered, so programs that wrongly depend on that might
break again in the future if something changes again. You really just
need to fix the code that's wrongly relying on errno being preserved
on success. Only check errno when an error is returned.


Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.