Fixing the race condition in shlock.c
Julien ÉLIE
julien at trigofacile.com
Sun Nov 16 21:42:46 UTC 2008
Hi Berend,
> I have atached my current version of shlock.c. I don't know if the
> mailing list will strip attachements...
The attachments problem was fixed a few months ago.
> I downloaded the latest source from isc.org yesterday and the source
> of shlock.c did not have a fix for the race condition in that version
> either.
All right. Thanks a lot for your patch.
I attach to this mail a suggestion for the new shlock.c. Does it look
good to you?
I especially used atol instead of atoi, booleans instead of integers,
snprintf instead of sprintf,
changed
return (pid > 0) && ((kill(pid, 0) == 0) || (errno != ESRCH));
to
return (pid > 0) && ((kill(pid, 0) >= 0) || (errno != ESRCH));
changed
/* Don't write exactly sizeof(pid) bytes, someone might treat it
* as a binary lock. */
- (void)sprintf(buff, "%10d\n", pid);
to
+ snprintf(buff, sizeof(buff), "%ld\n", (long) pid);
-- is it right? I do not understand well your comment.
changed
if (!ok) {
syswarn(CANTWRITEPID, tmp, strerror(errno));
- goto ExitUnlink;
}
to
+ goto ExitClose;
because fd should be closed, shouldn't it?
I believe your patch also fixes what is currently written in the man page:
BUGS
shlock assumes that it will not be used in an environment with multiple
locks/unlocks in a short time (due to a race condition). That is, shlock
is intended for daily or hourly jobs.
> Not necessarily. It is pretty difficult to trigger on a single cpu
> (single core) system. It all depends on the scheduling of the
> processes. On my dual core system I get multiple failures almost every
> run. On my old pentium 3 it does run without a failure most of the
> time.
That is why I do not manage to reproduce the bug.
> The race condition is that there is a timewindow between the discovery
> of an invalid lock and the removal of that lockfile.
OK.
Is the attached file fine?
--
Julien ÉLIE
« César a vraiment pris les gaulois en grippe ! » (Astérix)
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: shlock.c
URL: <https://lists.isc.org/pipermail/inn-workers/attachments/20081116/94f92641/attachment.c>
More information about the inn-workers
mailing list