Check mmap() against MAP_FAILED

Fixes #338
This commit is contained in:
falkTX 2018-04-05 10:04:18 +02:00
parent 1aeb656a67
commit cc8576a7ab
1 changed files with 16 additions and 10 deletions

View File

@ -147,7 +147,9 @@ bool JackLinuxFutex::Allocate(const char* name, const char* server_name, int val
return false;
}
if ((fFutex = (FutexData*)mmap(NULL, sizeof(FutexData), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, fSharedMem, 0)) == NULL) {
FutexData* futex = (FutexData*)mmap(NULL, sizeof(FutexData), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, fSharedMem, 0);
if (futex == NULL || futex == MAP_FAILED) {
jack_error("Allocate: can't check in named futex name = %s err = %s", fName, strerror(errno));
close(fSharedMem);
fSharedMem = -1;
@ -157,11 +159,12 @@ bool JackLinuxFutex::Allocate(const char* name, const char* server_name, int val
fPrivate = internal;
fFutex->futex = value;
fFutex->internal = internal;
fFutex->wasInternal = internal;
fFutex->needsChange = false;
fFutex->externalCount = 0;
futex->futex = value;
futex->internal = internal;
futex->wasInternal = internal;
futex->needsChange = false;
futex->externalCount = 0;
fFutex = futex;
return true;
}
@ -182,24 +185,27 @@ bool JackLinuxFutex::Connect(const char* name, const char* server_name)
return false;
}
if ((fFutex = (FutexData*)mmap(NULL, sizeof(FutexData), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, fSharedMem, 0)) == NULL) {
FutexData* futex = (FutexData*)mmap(NULL, sizeof(FutexData), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, fSharedMem, 0);
if (futex == NULL || futex == MAP_FAILED) {
jack_error("Connect: can't connect named futex name = %s err = %s", fName, strerror(errno));
close(fSharedMem);
fSharedMem = -1;
return false;
}
if (! fPrivate && fFutex->wasInternal)
if (! fPrivate && futex->wasInternal)
{
const char* externalSync = getenv("JACK_INTERNAL_CLIENT_SYNC");
if (externalSync != NULL && strstr(fName, externalSync) != NULL && ++fFutex->externalCount == 1)
if (externalSync != NULL && strstr(fName, externalSync) != NULL && ++futex->externalCount == 1)
{
jack_error("Note: client %s running as external client temporarily", fName);
fFutex->needsChange = true;
futex->needsChange = true;
}
}
fFutex = futex;
return true;
}