Date: Wed, 23 May 2007 12:29:35 -0400 From: Joe Marcus Clarke <marcus@FreeBSD.org> To: Dag-Erling =?ISO-8859-1?Q?Sm=F8rgrav?= <des@des.no> Cc: pjd@FreeBSD.org, "current@freebsd.org" <current@FreeBSD.org> Subject: Re: [Fwd: Serious problem with mount(8)] Message-ID: <1179937775.53308.6.camel@shumai.marcuscom.com> In-Reply-To: <867ir0atfh.fsf@dwp.des.no> References: <46534301.10005@FreeBSD.org> <864pm4zkre.fsf@dwp.des.no> <46534EE2.3090107@FreeBSD.org> <867ir0atfh.fsf@dwp.des.no>
next in thread | previous in thread | raw e-mail | index | archive | help
--=-2Rf1Lyd9u+PMxUZMWvc6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Wed, 2007-05-23 at 09:30 +0200, Dag-Erling Sm=F8rgrav wrote: > Joe Marcus Clarke <marcus@FreeBSD.org> writes: > > Dag-Erling Sm=F8rgrav <des@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. >=20 > 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): >=20 > fd =3D open(pidfile, O_RDONLY); > fcntl(fd, F_GETLK, &fl) > if (fl.l_type =3D=3D F_UNLCK) > return (-1) > fstat(fd, &fsb); > read(fd, buf, fsb.st_len); > if (atoi(buf) !=3D fl.l_pid) > return (-1); > #ifdef OPTIONAL > stat(pidfile, &sb); > if (sb.st_dev !=3D fsb.st_dev || sb.st_ino !=3D fsb.st_ino) > return (-1); > #endif > return (fl.l_pid); >=20 > 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 --=20 Joe Marcus Clarke FreeBSD GNOME Team :: gnome@FreeBSD.org FreeNode / #freebsd-gnome http://www.FreeBSD.org/gnome --=-2Rf1Lyd9u+PMxUZMWvc6 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (FreeBSD) iD8DBQBGVGvtb2iPiv4Uz4cRAh0yAKCwPo+37bGZBAMAlZ4jb8/MMbMBxACggk/m YVXvlI5YqjFXkuItF+leNKA= =SFK9 -----END PGP SIGNATURE----- --=-2Rf1Lyd9u+PMxUZMWvc6--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1179937775.53308.6.camel>