--- storage/buffindexed/shmem.c.orig 2012-08-27 23:39:42.000000000 -0700 +++ storage/buffindexed/shmem.c 2012-08-27 23:37:50.000000000 -0700 @@ -26,7 +26,9 @@ static int smcGetSemaphore(const char *name) { key_t kt = ftok( (char *)name, 0 ); - int id = semget(kt, 0, S_IRWXU|S_IRWXG|S_IRWXO); + int perm = SEM_R | SEM_A | (SEM_R>>3) | (SEM_A>>3) | + (SEM_R>>6) | (SEM_A>>6); + int id = semget(kt, 0, perm); if (id < 0) { syswarn("semget failed to get semaphore for %s", name); @@ -37,15 +39,17 @@ static int smcCreateSemaphore(const char *name) { key_t kt = ftok( (char *)name, 0 ); - int id = semget(kt, 2, IPC_CREAT|S_IRWXU|S_IRWXG|S_IRWXO); + int perm = SEM_R | SEM_A | (SEM_R>>3) | (SEM_A>>3) | + (SEM_R>>6) | (SEM_A>>6); + int id = semget(kt, 2, IPC_CREAT|perm); if (id < 0) { if (errno == EACCES || errno == EINVAL) { /* looks like a wrong semaphore exists. remove it. */ - id = semget(kt, 0, S_IRWXU|S_IRWXG|S_IRWXO); + id = semget(kt, 0, perm); if (id < 0) { /* couldn't even retrieve it. */ - syswarn("cant get semaphore using %s", name); + syswarn("cant get semaphore using %s (key=%d)", name, kt); return id; } /* try to remove it */ @@ -65,7 +69,7 @@ } #endif /* and retry creating it */ - id = semget(kt, 2, IPC_CREAT|S_IRWXU|S_IRWXG|S_IRWXO); + id = semget(kt, 2, IPC_CREAT|perm); } } if (id < 0)