kernel: Add missing NULL check to _user_xsi_semget.
Private semaphores will have a key of -1, but IPC_PRIVATE is 0, meaning it is possible to wind up here and get a NULL semaphoreSet if someone passes us an argument of -1. Reported on Twitter.
This commit is contained in:
@@ -771,8 +771,8 @@ _user_xsi_semget(key_t key, int numberOfSemaphores, int flags)
|
|||||||
|
|
||||||
MutexLocker _(sXsiSemaphoreSetLock);
|
MutexLocker _(sXsiSemaphoreSetLock);
|
||||||
semaphoreSet = sSemaphoreHashTable.Lookup(semaphoreSetID);
|
semaphoreSet = sSemaphoreHashTable.Lookup(semaphoreSetID);
|
||||||
if (!semaphoreSet->HasPermission()) {
|
if (semaphoreSet == NULL || !semaphoreSet->HasPermission()) {
|
||||||
TRACE_ERROR(("xsi_semget: calling process has not permission "
|
TRACE_ERROR(("xsi_semget: calling process has no permission "
|
||||||
"on semaphore %d, key %d\n", semaphoreSet->ID(),
|
"on semaphore %d, key %d\n", semaphoreSet->ID(),
|
||||||
(int)key));
|
(int)key));
|
||||||
return EACCES;
|
return EACCES;
|
||||||
@@ -815,9 +815,9 @@ _user_xsi_semget(key_t key, int numberOfSemaphores, int flags)
|
|||||||
|
|
||||||
MutexLocker _(sXsiSemaphoreSetLock);
|
MutexLocker _(sXsiSemaphoreSetLock);
|
||||||
semaphoreSet->SetID();
|
semaphoreSet->SetID();
|
||||||
if (isPrivate)
|
if (isPrivate) {
|
||||||
semaphoreSet->SetIpcKey((key_t)-1);
|
semaphoreSet->SetIpcKey((key_t)-1);
|
||||||
else {
|
} else {
|
||||||
semaphoreSet->SetIpcKey(key);
|
semaphoreSet->SetIpcKey(key);
|
||||||
ipcKey->SetSemaphoreSetID(semaphoreSet);
|
ipcKey->SetSemaphoreSetID(semaphoreSet);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user