The following reply was made to PR kern/166706; it has been noted by GNATS.
From: David Xu <listlog2...@gmail.com> To: Jilles Tjoelker <jil...@stack.nl> Cc: bug-follo...@freebsd.org, davi...@freebsd.org, igaztan...@gmail.com Subject: Re: kern/166706: [libc] sem_open(3) incorrectly returns the already opened named semaphore handle when O_EXCL is used [regression] Date: Mon, 09 Apr 2012 07:49:37 +0800 On 2012/4/9 1:26, Jilles Tjoelker wrote: >> [sem_new.c may return success with O_CREAT|O_EXCL if the semaphore >> already exists] > The code in sem_new.c will happily add another reference to an already > open semaphore, even if O_CREAT|O_EXCL were specified. > > The below patch fixes this by adding an extra check. It makes the > submitter's test program pass again on head. > > What do you think? > > Index: lib/libc/gen/sem_new.c > =================================================================== > --- lib/libc/gen/sem_new.c (revision 233702) > +++ lib/libc/gen/sem_new.c (working copy) > @@ -162,10 +162,16 @@ > _pthread_mutex_lock(&sem_llock); > LIST_FOREACH(ni,&sem_list, next) { > if (strcmp(name, ni->name) == 0) { > - ni->open_count++; > - sem = ni->sem; > - _pthread_mutex_unlock(&sem_llock); > - return (sem); > + if ((flags& (O_CREAT|O_EXCL)) == (O_CREAT|O_EXCL)) { > + _pthread_mutex_unlock(&sem_llock); > + errno = EEXIST; > + return (SEM_FAILED); > + } else { > + ni->open_count++; > + sem = ni->sem; > + _pthread_mutex_unlock(&sem_llock); > + return (sem); > + } > } > } > The patch looks fine to me. _______________________________________________ freebsd-bugs@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"