[Fwd: Serious problem with mount(8)]
Joe Marcus Clarke
marcus at FreeBSD.org
Wed May 23 16:43:59 UTC 2007
On Wed, 2007-05-23 at 09:30 +0200, Dag-Erling Smørgrav wrote:
> Joe Marcus Clarke <marcus at FreeBSD.org> writes:
> > Dag-Erling Smørgrav <des at des.no> writes:
> > > Better yet, extend the pidfile API with a function which reads the
> > > contents of a PID file and also checks whether it's locked.
> > I'd be happy to do this. Is my approach with this code sound (i.e. can
> > I simply port this to pidfile(3)), or should I take another approach?
> > Thanks.
>
> You expose yourself to all sorts of race conditions by opening the file
> twice... what you should do is something like (off the top of my head):
>
> fd = open(pidfile, O_RDONLY);
> fcntl(fd, F_GETLK, &fl)
> if (fl.l_type == F_UNLCK)
> return (-1)
> fstat(fd, &fsb);
> read(fd, buf, fsb.st_len);
> if (atoi(buf) != fl.l_pid)
> return (-1);
> #ifdef OPTIONAL
> stat(pidfile, &sb);
> if (sb.st_dev != fsb.st_dev || sb.st_ino != fsb.st_ino)
> return (-1);
> #endif
> return (fl.l_pid);
>
> with appropriate error checking, of course.
Thanks for the tip, but this is moot now that flopen(3) has been fixed,
and pidfile_open(3) operates as documented.
Joe
--
Joe Marcus Clarke
FreeBSD GNOME Team :: gnome at FreeBSD.org
FreeNode / #freebsd-gnome
http://www.FreeBSD.org/gnome
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: This is a digitally signed message part
Url : http://lists.freebsd.org/pipermail/freebsd-current/attachments/20070523/dca4a14b/attachment.pgp
More information about the freebsd-current
mailing list