mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-15 17:40:06 +00:00
(__new_semctl): Pass union semun as 4th argument to semctl syscall, not
address of it.
This commit is contained in:
parent
d9c1416a4a
commit
d0168cc099
@ -73,7 +73,7 @@ __new_semctl (int semid, int semnum, int cmd, ...)
|
||||
|
||||
#if __ASSUME_32BITUIDS > 0
|
||||
return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64,
|
||||
CHECK_SEMCTL (&arg, semid, cmd | __IPC_64));
|
||||
CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)->array);
|
||||
#else
|
||||
switch (cmd) {
|
||||
case SEM_STAT:
|
||||
@ -82,7 +82,7 @@ __new_semctl (int semid, int semnum, int cmd, ...)
|
||||
break;
|
||||
default:
|
||||
return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd,
|
||||
CHECK_SEMCTL (&arg, semid, cmd));
|
||||
CHECK_SEMCTL (&arg, semid, cmd)->array);
|
||||
}
|
||||
|
||||
{
|
||||
@ -93,7 +93,7 @@ __new_semctl (int semid, int semnum, int cmd, ...)
|
||||
/* Unfortunately there is no way how to find out for sure whether
|
||||
we should use old or new semctl. */
|
||||
result = INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64,
|
||||
CHECK_SEMCTL (&arg, semid, cmd | __IPC_64));
|
||||
CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)->array);
|
||||
if (result != -1 || errno != EINVAL)
|
||||
return result;
|
||||
|
||||
@ -113,7 +113,7 @@ __new_semctl (int semid, int semnum, int cmd, ...)
|
||||
}
|
||||
}
|
||||
result = INLINE_SYSCALL (semctl, 4, semid, semnum, cmd,
|
||||
CHECK_SEMCTL (&arg, semid, cmd));
|
||||
CHECK_SEMCTL (&arg, semid, cmd)->array);
|
||||
if (result != -1 && cmd != IPC_SET)
|
||||
{
|
||||
memset(buf, 0, sizeof(*buf));
|
||||
|
Loading…
Reference in New Issue
Block a user