fix mmap leak in sem_open failure path for link call

the leak was found by static analysis (reported by Alexander Monakov),
not tested/observed, but seems to have occured both when failing due
to O_EXCL, and in a race condition with O_CREAT but not O_EXCL where a
semaphore by the same name was created concurrently.
This commit is contained in:
Rich Felker 2015-04-21 13:24:46 -04:00
parent c5ab5bd3be
commit 086793ad99

View File

@ -126,6 +126,7 @@ sem_t *sem_open(const char *name, int flags, ...)
e = link(tmp, name) ? errno : 0;
unlink(tmp);
if (!e) break;
munmap(map, sizeof(sem_t));
/* Failure is only fatal when doing an exclusive open;
* otherwise, next iteration will try to open the
* existing file. */