We want to be sure the shared semaphore file is sized just right.
If it's not perfect, we'd better be creating it, and if we are
creating it, it'd better be empty.
Index: rthread_sem.c
===================================================================
RCS file: /cvs/src/lib/librthread/rthread_sem.c,v
retrieving revision 1.12
diff -u -p -r1.12 rthread_sem.c
--- rthread_sem.c 20 Nov 2013 03:16:39 -0000 1.12
+++ rthread_sem.c 20 Nov 2013 03:32:36 -0000
@@ -338,7 +338,17 @@ sem_open(const char *name, int oflag, ..
errno = EPERM;
return (semp);
}
- if (sb.st_size < SEM_MMAP_SIZE) {
+ if (sb.st_size != SEM_MMAP_SIZE) {
+ if (!(oflag & O_CREAT)) {
+ close(fd);
+ errno = EINVAL;
+ return (semp);
+ }
+ if (sb.st_size != 0) {
+ close(fd);
+ errno = EINVAL;
+ return (semp);
+ }
if (ftruncate(fd, SEM_MMAP_SIZE) == -1) {
oerrno = errno;
close(fd);