Explorar o código

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.
Rich Felker %!s(int64=10) %!d(string=hai) anos
pai
achega
086793ad99
Modificáronse 1 ficheiros con 1 adicións e 0 borrados
  1. 1 0
      src/thread/sem_open.c

+ 1 - 0
src/thread/sem_open.c

@@ -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. */