Date: Tue, 12 Dec 2000 14:45:37 -0800 From: Jeff Roberson <jeff@midstream.com> To: "'freebsd-current@freebsd.org'" <freebsd-current@freebsd.org> Subject: Bug Fix for SYSV semaphores. Message-ID: <31E4B6337A4FD411BD45000102472E0C05E6FD@EMAIL_SERVER>
next in thread | raw e-mail | index | archive | help
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_001_01C0648D.4319C7E0
Content-Type: text/plain;
charset="iso-8859-1"
I noticed that sysv semaphores initialize the otime member of the semid_ds
structure to 0, but they never update it afterwards. This field is supposed
to be the last operation time. ie the last time a semctl was done. In UNIX
Network Programming, Stevens suggests using this variable to detect races
between multiple processes creating/accessing a sysv semaphore. Anyway, I
looked through the code and came up with the following trivial patch. Could
some one review it and perhaps commit it? This patch was made against
current, but I noticed the bug is there in 4.1.1 and most likely everything
before that.
Thanks,
Jeff
(Pardon the revision numbers, they are from my own repository)
*** sysv_sem.c 2000/09/15 11:11:48 1.1.1.1
--- sysv_sem.c 2000/12/12 23:44:28
***************
*** 543,548 ****
--- 543,550 ----
return(EINVAL);
}
+ semaptr->sem_otime = time_second;
+
if (eval == 0)
p->p_retval[0] = rval;
return(eval);
------_=_NextPart_001_01C0648D.4319C7E0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Diso-8859-1">
<META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version =
5.5.2650.12">
<TITLE>Bug Fix for SYSV semaphores.</TITLE>
</HEAD>
<BODY>
<P><FONT SIZE=3D2>I noticed that sysv semaphores initialize the otime =
member of the semid_ds structure to 0, but they never update it =
afterwards. This field is supposed to be the last operation =
time. ie the last time a semctl was done. In UNIX Network =
Programming, Stevens suggests using this variable to detect races =
between multiple processes creating/accessing a sysv semaphore. =
Anyway, I looked through the code and came up with the following =
trivial patch. Could some one review it and perhaps commit =
it? This patch was made against current, but I noticed the bug is =
there in 4.1.1 and most likely everything before that.</FONT></P>
<P><FONT SIZE=3D2>Thanks,</FONT>
<BR><FONT SIZE=3D2>Jeff</FONT>
</P>
<P><FONT SIZE=3D2>(Pardon the revision numbers, they are from my own =
repository)</FONT>
</P>
<P><FONT SIZE=3D2>*** sysv_sem.c 2000/09/15 =
11:11:48 1.1.1.1</FONT>
<BR><FONT SIZE=3D2>--- sysv_sem.c 2000/12/12 23:44:28</FONT>
<BR><FONT SIZE=3D2>***************</FONT>
<BR><FONT SIZE=3D2>*** 543,548 ****</FONT>
<BR><FONT SIZE=3D2>--- 543,550 ----</FONT>
<BR><FONT =
SIZE=3D2> &nb=
sp; return(EINVAL);</FONT>
<BR><FONT SIZE=3D2> }</FONT>
<BR><FONT SIZE=3D2> </FONT>
<BR><FONT SIZE=3D2>+ =
semaptr->sem_otime =3D time_second;</FONT>
<BR><FONT SIZE=3D2>+ </FONT>
<BR><FONT SIZE=3D2> if (eval =
=3D=3D 0)</FONT>
<BR><FONT =
SIZE=3D2> &nb=
sp; p->p_retval[0] =3D rval;</FONT>
<BR><FONT SIZE=3D2> =
return(eval);</FONT>
</P>
</BODY>
</HTML>
------_=_NextPart_001_01C0648D.4319C7E0--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?31E4B6337A4FD411BD45000102472E0C05E6FD>
