Use ftok() for semget(), and only lower mode bits
authorHallvard Furuseth <hallvard@openldap.org>
Tue, 2 Jun 2015 18:51:03 +0000 (20:51 +0200)
committerHallvard Furuseth <hallvard@openldap.org>
Tue, 2 Jun 2015 18:51:03 +0000 (20:51 +0200)
libraries/liblmdb/mdb.c

index 482b98e..cc0944d 100644 (file)
@@ -4548,7 +4548,10 @@ mdb_env_setup_locks(MDB_env *env, char *lpath, int mode, int *excl)
                if (!env->me_wmutex) goto fail_errno;
 #elif defined(MDB_USE_SYSV_SEM)
                unsigned short vals[2] = {1, 1};
-               semid = semget(IPC_PRIVATE, 2, mode);
+               key_t key = ftok(lpath, 'M');
+               if (key == -1)
+                       goto fail_errno;
+               semid = semget(key, 2, (mode & 0777) | IPC_CREAT);
                if (semid < 0)
                        goto fail_errno;
                semu.array = vals;