PR: kern/29698 (part)
Reviewed by: audit Implement SEM_STAT (like IPC_STAT but treats semid as sema-index). The linuxerator will need it.
This commit is contained in:
parent
2afc0f9696
commit
30b1089d33
@ -499,6 +499,25 @@ __semctl(td, uap)
|
||||
goto done2;
|
||||
}
|
||||
|
||||
switch(cmd) {
|
||||
case SEM_STAT:
|
||||
if (semid < 0 || semid >= seminfo.semmsl)
|
||||
return(EINVAL);
|
||||
semaptr = &sema[semid];
|
||||
if ((semaptr->sem_perm.mode & SEM_ALLOC) == 0 )
|
||||
return(EINVAL);
|
||||
if ((error = ipcperm(td, &semaptr->sem_perm, IPC_R)))
|
||||
return(error);
|
||||
if ((error = copyin(arg, &real_arg, sizeof(real_arg))) != 0)
|
||||
return(error);
|
||||
error = copyout((caddr_t)semaptr, real_arg.buf,
|
||||
sizeof(struct semid_ds));
|
||||
rval = IXSEQ_TO_IPCID(semid,semaptr->sem_perm);
|
||||
if (error == 0)
|
||||
td->td_retval[0] = rval;
|
||||
goto done2;
|
||||
}
|
||||
|
||||
semid = IPCID_TO_IX(semid);
|
||||
if (semid < 0 || semid >= seminfo.semmsl) {
|
||||
error = EINVAL;
|
||||
|
@ -58,6 +58,8 @@ union semun {
|
||||
#define GETZCNT 7 /* Return the value of semzcnt {READ} */
|
||||
#define SETVAL 8 /* Set the value of semval to arg.val {ALTER} */
|
||||
#define SETALL 9 /* Set semvals from arg.array {ALTER} */
|
||||
#define SEM_STAT 10 /* Like IPC_STAT but treats semid as sema-index */
|
||||
#define SEM_INFO 11 /* Like IPC_INFO but treats semid as sema-index */
|
||||
|
||||
/*
|
||||
* Permissions
|
||||
|
Loading…
x
Reference in New Issue
Block a user